Điểm:0

Sự cố khi khởi động nhóm kubernetes elaticsearch do quyền truy cập bị từ chối trong elaticsearch.keystore

lá cờ ai

Tôi đã có ngăn xếp EFK trên cụm kubernetes trong AWS EKS và tôi dự định thêm chức năng ghi nhật ký s3 cho các nhóm tìm kiếm đàn hồi trong es-statefulset. Đối với điều này, tôi đã tạo một hình ảnh elaticseach tùy chỉnh nơi tôi đã thêm plugin kho lưu trữ-s3 và sau đó thêm một bộ chứa init để lưu trữ thông tin đăng nhập AWS trong tệp yaml es-statefulset. Nhưng khi áp dụng các thay đổi, phần elaticseach pods của es statefulset không thành công với 'Lỗi'.

Cấu hình statefulset như sau:

apiVersion: apps/v1 # Phiên bản API của kubernetes có sẵn `StatefulSet`. Đối với Kubernetes 1.8.7, các ứng dụng/v1beta1 của nó
loại: StatefulSet # Loại tài nguyên mà chúng tôi đang tạo
siêu dữ liệu: # Giữ siêu dữ liệu cho tài nguyên này
  tên: es # Tên của tài nguyên này
  không gian tên: nhật ký kube
  nhãn: # Siêu dữ liệu bổ sung đi vào bên trong nhãn. Nó dành cho tài nguyên trạng thái
    thành phần: elaticsearch # Chỉ là siêu dữ liệu chúng tôi đang thêm
spec: # Giữ thông số kỹ thuật của tài nguyên này
  bản sao: 5 # Chịu trách nhiệm duy trì số lượng bản sao nhất định
  bộ chọn:
    trận đấuNhãn:
      thành phần: elaticsearch
  serviceName: elaticsearch # Tên dịch vụ, được yêu cầu bởi statefulset
  mẫu: # Mẫu chứa thông số kỹ thuật của nhóm sẽ được tạo và duy trì bởi statefulset
    siêu dữ liệu: # Giữ siêu dữ liệu cho nhóm
      nhãn: # Siêu dữ liệu bổ sung đi vào bên trong nhãn. Nó dành cho nhóm
        thành phần: elaticsearch # Chỉ là siêu dữ liệu cho nhóm
    spec: # Giữ thông số kỹ thuật của nhóm
      initContainers: # sẽ luôn khởi tạo trước các vùng chứa khác trong nhóm
      - tên: init-sysctl # Tên của bộ chứa init
        hình ảnh: busybox # Hình ảnh sẽ được triển khai trong vùng chứa này
        imagePullPolicy: IfNotPresent # Đặt chính sách chỉ lấy hình ảnh từ sổ đăng ký nếu nó không có sẵn cục bộ
        lệnh: ["sysctl", "-w", "vm.max_map_count=262144"] # Đặt biến hệ thống trong vùng chứa, giá trị này được yêu cầu bởi ES
        securityContext: # Security context giữ bất kỳ quyền đặc biệt nào được cấp cho vùng chứa này
          đặc quyền: đúng # Vùng chứa này có quyền chạy ở chế độ riêng tư
      - tên: add-aws-keys
        hình ảnh: xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
        vi:
        - tên: AWS_ACCESS_KEY_ID
          giá trịTừ:
            bí mậtKeyRef:
              tên: aws-s3-keys
              khóa: truy cập-key-id
        - tên: AWS_SECRET_ACCESS_KEY
          giá trịTừ:
            bí mậtKeyRef:
              tên: aws-s3-keys
              khóa: khóa bí mật truy cập
        chỉ huy:
        - sh
        - -c
        - |
          tiếng vang $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
          tiếng vang $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
      container: # Giữ danh sách và cấu hình của các container thông thường trong nhóm
      - name: es # Tên của container đầu tiên
        securityContext: # Security context giữ bất kỳ quyền đặc biệt nào được cấp cho vùng chứa này
          khả năng: # Bộ chứa sẽ có khả năng Khóa IPC, có thể khóa trên bộ nhớ để không bị tráo đổi.
            cộng:
              - IPC_LOCK
        hình ảnh: xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2 
        env: # mảng biến môi trường có giá trị được truyền vào ảnh này
        - tên: KUBERNETES_CA_CERTIFICATE_FILE
          giá trị: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        - tên: KHÔNG GIAN TÊN
          giá trịTừ:
            trường Tham khảo:
              trườngPath: metadata.namespace
        - tên: "CLUSTER_NAME"
          giá trị: "myesdb1"
        - tên: "DISCOVERY_SERVICE"
          giá trị: "elasticsearch"
        - tên: MẠNG_HOST 
          giá trị: "_eth0_"
        - tên: ES_JAVA_OPTS #Chỉ định Kích thước Heap
          giá trị: -Xms1536m -Xmx1536m
        cổng: # Cổng mà nhóm này sẽ mở
        - Cảng container: 9200
          tên: http
          giao thức: TCP
        - Cảng container: 9300
          tên: vận chuyển
          giao thức: TCP
        volumeMounts: # Đường dẫn nơi âm lượng sẽ được gắn vào.
        - đường dẫn gắn kết:/dữ liệu
          tên: lưu trữ # Tên được đặt cho thú cưỡi này
  cập nhậtchiến lược:
    loại: CánUpdate
  volumeClaimTemplates: # Nó cung cấp dung lượng lưu trữ ổn định bằng cách sử dụng PersistentVolumes được cung cấp bởi PersistentVolume Provider
  - siêu dữ liệu: # Siêu dữ liệu được cung cấp cho tài nguyên này (Yêu cầu khối lượng liên tục)
      tên: lưu trữ # Tên của tài nguyên này
    spec: # Đặc điểm kỹ thuật của PVC này (Yêu cầu khối lượng không đổi)
      storageClassName: gp2 # Lớp lưu trữ được sử dụng để cung cấp PVC này
      accessModes: [ ReadWriteOnce ] # Chế độ truy cập của ổ đĩa
      tài nguyên: # Giữ danh sách tài nguyên
        yêu cầu: # Yêu cầu được gửi đến lớp lưu trữ
          lưu trữ: 100Gi 

Nhóm mô tả đưa ra những điều sau đây:

$ kubectl description pod/es-0 -n kube-logging
Tên: es-0
Không gian tên: nhật ký kube
Ưu tiên: 0
Nút: ip-xxxxxxxxxxxx.ap-southeast-1.compute.internal/xxxxxxxxx
Thời gian bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:44 +0000
Nhãn: component=elaticsearch
              bộ điều khiển-sửa đổi-hash=es-7dc4b7477c
              statefulset.kubernetes.io/pod-name=es-0
Chú thích: kubernetes.io/psp:eks.privileged
Tình trạng: Đang chạy
IP: xxxxxxxxxxxxxx
IP:
  IP: xxxxxxxxxxxxxx
Được kiểm soát bởi: StatefulSet/es
Bộ chứa ban đầu:
  init-sysctl:
    ID vùng chứa: docker://291ab715d302d7f505925168685955ad20c529e4db3371c3385e911614d60179
    Hình ảnh: busybox
    ID hình ảnh: docker-pullable://busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
    Cổng: <không có>
    Cổng máy chủ: <none>
    Chỉ huy:
      hệ thống
      -w
      vm.max_map_count=262144
    Trạng thái: Đã chấm dứt
      Lý do: Đã hoàn thành
      Mã thoát: 0
      Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:50 +0000
      Kết thúc: Thu, 19/08/2021 16:23:50 +0000
    Sẵn sàng: Đúng
    Số lần khởi động lại: 0
    Môi trường: <không>
    gắn kết:
      /var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
  add-aws-key:
    ID vùng chứa: docker://23e3335b99c8a5bf144f2f2a52c1bbd357a667205ce335ead5e0627ecdf403e9
    Hình ảnh: xxxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
    ID hình ảnh: docker-pullable://xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes@sha256:c09d586a4bdc7149c41ff74783bae0138f68c4779f03315b197e7dda1c4332c6
    Cổng: <không có>
    Cổng máy chủ: <none>
    Chỉ huy:
      sh
      -c
      tiếng vang $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
      tiếng vang $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
      
    Trạng thái: Đã chấm dứt
      Lý do: Đã hoàn thành
      Mã thoát: 0
      Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:50 +0000
      Kết thúc: Thu, 19/08/2021 16:23:53 +0000
    Sẵn sàng: Đúng
    Số lần khởi động lại: 0
    Môi trường:
      AWS_ACCESS_KEY_ID: <đặt thành khóa 'access-key-id' trong bí mật 'aws-s3-keys'> Tùy chọn: sai
      AWS_SECRET_ACCESS_KEY: <đặt thành khóa 'access-secret-key' trong 'aws-s3-keys' bí mật> Tùy chọn: sai
    gắn kết:
      /var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
Hộp đựng:
  là:
    ID vùng chứa: docker://a26a4cf4ed98f0f6dd535069e8a5c54dbf39746a04e8a14fbacb0c51ff4684ec
    Hình ảnh: xxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
    ID hình ảnh: docker-pullable://xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes@sha256:c09d586a4bdc7149c41ff74783bae0138f68c4779f03315b197e7dda1c4332c6
    Cổng: 9200/TCP, 9300/TCP
    Cổng máy chủ: 0/TCP, 0/TCP
    Trạng thái: Chờ đợi
      Lý do: CrashLoopBackOff <<<<<<<<<<<
    Trạng thái cuối cùng: Đã chấm dứt <<<<<<<<<<<<<<<<<
      Lý do: Lỗi
      Mã thoát: 1
      Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:50:16 +0000
      Kết thúc: Thu, 19/08/2021 16:50:17 +0000
    Sẵn sàng: Sai
    Số lần khởi động lại: 10
    Môi trường:
      KUBERNETES_CA_CERTIFICATE_FILE: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      NAMESPACE: ghi nhật ký kube (v1:metadata.namespace)
      CLUSTER_NAME: myesdb1
      DISCOVERY_SERVICE: elaticsearch
      MẠNG_HOST: _eth0_
      ES_JAVA_OPTS: -Xms1536m -Xmx1536m
    gắn kết:
      /dữ liệu từ bộ lưu trữ (rw)
      /var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
Điều kiện:
  Loại Trạng thái
  Khởi tạo đúng 
  Sẵn sàng Sai 
  ContainerSẵn sàng Sai 
  PodScheduled True 
tập:
  kho:
    Loại: PersistentVolumeClaim (tham chiếu đến PersistentVolumeClaim trong cùng một không gian tên)
    Tên yêu cầu: lưu trữ-es-0
    Chỉ đọc: sai
  mặc định-token-9nv96:
    Loại: Bí mật (một tập được điền bởi một Bí mật)
    SecretName: default-token-9nv96
    Tùy chọn: sai
Lớp QoS: BestEffort
Bộ chọn nút: <none>
Dung sai: node.kubernetes.io/not-ready:NoExecute trong 300 giây
                 node.kubernetes.io/unreachable:NoExecute trong 300 giây
Sự kiện:
  Nhập Lý do Tuổi từ Tin nhắn
  ---- ------ ---- ---- -------
  Bình thường Đã lên lịch Trình lập lịch trình mặc định 29 phút Đã gán thành công kube-logging/es-0 cho ip-xxxxxxx.ap-southeast-1.compute.internal
  Bình thường Thành côngAttachVolume Bộ điều khiển đính kèm 29m AttachVolume.Attach đã thành công cho tập "pvc-2abce33a-7193-4070-b4da-74486e72d568"
  Kéo bình thường 29m kubelet Hình ảnh thùng chứa "busybox" đã có trên máy
  Đã tạo bình thường 29m kubelet Đã tạo vùng chứa init-sysctl
  Bắt đầu bình thường 29m kubelet Đã bắt đầu container init-sysctl
  Bình thường được kéo 29m kubelet Container image "xxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2" đã có trên máy
  Đã tạo bình thường 29m kubelet Đã tạo container-aws-keys
  Đã bắt đầu bình thường 29m kubelet Đã bắt đầu container add-aws-keys
  Đã tạo bình thường 29m (x4 trên 29m) kubelet Đã tạo container es
  Bắt đầu bình thường 29m (x4 trên 29m) kubelet Bắt đầu container es
  Kéo bình thường 28m (x5 trên 29m) Hình ảnh bộ chứa kubelet "xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2" đã có trên máy
  Cảnh báo BackOff 4m46s (x115 trên 29m) kubelet Back-off khởi động lại container không thành công

Nhật ký nhóm đưa ra lỗi sau liên quan đến AccessDeniedException: /elasticsearch/config/elasticsearch.keystore:

$ nhật ký kubectl pod/es-0 -n kube-logging
Bắt đầu Elaticsearch 6.4.2
Ngoại lệ trong chuỗi "chính" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /elasticsearch/config/elasticsearch.keystore
Nguyên nhân gốc rễ có thể xảy ra: java.nio.file.AccessDeniedException: /elasticsearch/config/elasticsearch.keystore <<<<<<<<<<<<
    tại sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
    tại sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    tại sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    tại sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    tại java.nio.file.Files.newByteChannel(Files.java:361)
    tại java.nio.file.Files.newByteChannel(Files.java:407)
    tại org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77)
    tại org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:215)
    tại org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:226)
    tại org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:291)
    tại org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136)
    tại org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127)
    tại org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
    tại org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    tại org.elasticsearch.cli.Command.main(Command.java:90)
    tại org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)
    tại org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86)
Tham khảo nhật ký để biết chi tiết lỗi đầy đủ.

Nghiên cứu sâu hơn về vấn đề này, tôi đã tìm thấy một số liên kết liên quan đến vấn đề này chỉ ra vấn đề với vị trí kho khóa trong vùng chứa elaticsearch và một số định dạng khóa trong gcp: https://github.com/elastic/cloud-on-k8s/issues/4124 https://discuss.elastic.co/t/access-denied-error-on-keystore-when-using-eck/276297

nhưng tôi không chắc cách giải quyết vấn đề này như trong AWS, hơn nữa khi tôi thử thêm trực tiếp thông tin đăng nhập trong khi tạo hình ảnh tùy chỉnh, nó đã được thêm thành công mà không gặp bất kỳ lỗi nào (đã kiểm tra bằng cách khởi động bộ chứa từ hình ảnh tùy chỉnh được tạo bằng Dockerfile):

...
Bước 6/8 : CHẠY echo $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
 ---> Đang chạy ở 42f5231573a7
Đã tạo kho khóa elaticsearch trong /elasticsearch/config
Tháo bình chứa trung gian 42f5231573a7
 ---> 3b202f355a8b
Bước 7/8 : CHẠY echo $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
 ---> Chạy trong 644e555f2362
Tháo container trung gian 644e555f2362
 ---> d08abcc761ce
Bước 8/8: RUN cài đặt bin/elasticsearch-plugin --batch repository-s3
 ---> Chạy trong d21d7d4fbb7b
-> Đang tải xuống kho lưu trữ-s3 từ đàn hồi
[================================================= ] 100%   
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
@ CẢNH BÁO: plugin yêu cầu quyền bổ sung @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
* java.lang.RuntimePermission truy cậpDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission triệt tiêuAccessChecks
* java.net.SocketPermission * kết nối, giải quyết
* java.util.PropertyPermission es.allow_insecure_settings đọc, ghi
Xem http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
để biết mô tả về những gì các quyền này cho phép và các rủi ro liên quan.
-> Đã cài đặt kho lưu trữ-s3
Đang xóa vùng chứa trung gian d21d7d4fbb7b
 ---> 19f4588f1f7f
Build thành công 19f4588f1f7f
Đã gắn thẻ thành công xxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2

Ngoài ra, xin lưu ý rằng tôi đã thử thay đổi quyền của /elasticsearch/config/elasticsearch.keystore thành 777 nhưng điều đó cũng không giúp được gì.

Tôi sẽ đánh giá cao một số trợ giúp về vấn đề này.

Aditya Agarwal avatar
lá cờ ai
Sự cố này đã được giải quyết sau khi tôi khởi động lại tất cả các nút trên đó đã thiết lập cụm kubernetes. Tôi không chắc làm thế nào điều này xóa các mục cũ vì các nhóm đang sử dụng âm lượng liên tục sẽ không thay đổi ngay cả sau khi khởi động lại.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.