Làm cách nào để gắn âm lượng với UID cụ thể trong Kubernetes Pod?


14

Vì vậy, tôi đang cố gắng để Nexus chạy dựa trên hình ảnh này trong Kubernetes, nhưng không thành công với:

mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory

Từ tài liệu cho biết quy trình chạy với UID 200 và âm lượng phải được gắn với các quyền đó:

A persistent directory, /nexus-data, is used for configuration,
logs, and storage. This directory needs to be writable by the Nexus
process, which runs as UID 200.

Tôi đã cố gắng tìm kiếm trong tài liệu để tìm cách gắn kết âm lượng với các quyền đó, tuy nhiên, tôi không thể tìm ra cách nào để làm điều đó.

Có ai biết liệu bạn có thể chỉ định trong cấu hình cho PVC / PV hoặc Triển khai UID nào để gắn kết âm lượng không? Nếu vậy thì thế nào?

Câu trả lời:


31

Không có cách nào để đặt UIDđịnh nghĩa bằng cách sử dụng định nghĩa Pod, nhưng Kubernetes lưu UIDkhối lượng có nguồn gốc.

Vì vậy, bạn có thể đặt UIDby InitContainer, khởi chạy trước vùng chứa chính, chỉ cần thêm nó vào containersđường dẫn của Deployment:

initContainers:
- name: volume-mount-hack
  image: busybox
  command: ["sh", "-c", "chown -R 200:200 /nexus"]
  volumeMounts:
  - name: <your nexus volume>
    mountPath: /nexus

Công trình tuyệt vời. Cảm ơn vì vụ hack này. Sử dụng nó với hình ảnh Oracle DB.
Thomas Hofmann

Tuy nhiên, điều này không giúp ích gì cho Cấu hình và Bí mật.
Torsten Bronger

Điều này cũng làm việc cho tôi (cũng với chmod). Tôi hy vọng ai đó (hoặc Kubernetes) thực hiện một phương pháp ít hack hơn.
leeman24

Tôi đang sử dụng một cái gì đó như command: ["sh", "-c", "chmod 777 /nexus && chown 200:200 /nexus"]để đảm bảo thư mục có thể ghi.
Martin Tapp

6

Giống như Anton đã nói, mặc dù chúng tôi không thể đặt UID bằng định nghĩa của Pod. Đây là một cách giải quyết khác cho chủ đề này.

Vui lòng tham khảo tài liệu chính thức của Kubernetes Cấu hình bối cảnh bảo mật cho Pod hoặc Container

Định nghĩa pod tôi đã sử dụng:

apiVersion: v1
kind: Pod
metadata:
  name: nexus3
  labels:
    app: nexus3
spec:
  securityContext:
    fsGroup: 200
  volumes:
  - name: nexus-data-vol
    emptyDir: {}
  containers:
  - name: nexus3-container
    image: sonatype/nexus3
    volumeMounts:
    - name: nexus-data-vol
      mountPath: /nexus-data

Định nghĩa dịch vụ:

apiVersion: v1
kind: Service
metadata:
  name: nexus3-service
spec:
  type: NodePort
  ports:
  - port: 8081
    nodePort: 30390
    protocol: TCP
    targetPort: 8081
  selector:
    app: nexus3

Và sau đó tạo pod và dịch vụ mà không có sự cho phép từ chối hoặc các lỗi khác:

# kubectl create -f nexus3.yaml
# kubectl create -f nexus3-svc.yaml

Hãy thử đăng nhập bộ chứa Nexus3 và kiểm tra chủ sở hữu / quyền của / nexus-data:

# kubectl exec -it nexus3 -- sh
sh-4.2$ ls -ld /nexus-data/
drwxrwsrwx 16 root nexus 4096 Mar 13 09:00 /nexus-data/
sh-4.2$

Như bạn có thể thấy, thư mục thuộc về root: nexus và bạn cũng có thể kiểm tra các tệp trong thư mục:

sh-4.2$ cd /nexus-data/
sh-4.2$ ls -l
total 72
drwxr-sr-x   3 nexus nexus  4096 Mar 13 09:00 blobs
drwxr-sr-x 269 nexus nexus 12288 Mar 13 08:59 cache
drwxr-sr-x   8 nexus nexus  4096 Mar 13 09:00 db
drwxr-sr-x   3 nexus nexus  4096 Mar 13 09:00 elasticsearch
drwxr-sr-x   3 nexus nexus  4096 Mar 13 08:59 etc
drwxr-sr-x   2 nexus nexus  4096 Mar 13 08:59 generated-bundles
drwxr-sr-x   2 nexus nexus  4096 Mar 13 08:59 instances
drwxr-sr-x   3 nexus nexus  4096 Mar 13 08:59 javaprefs
drwxr-sr-x   2 nexus nexus  4096 Mar 13 08:59 kar
drwxr-sr-x   3 nexus nexus  4096 Mar 13 08:59 keystores
-rw-r--r--   1 nexus nexus     8 Mar 13 08:59 lock
drwxr-sr-x   2 nexus nexus  4096 Mar 13 09:00 log
drwxr-sr-x   2 nexus nexus  4096 Mar 13 08:59 orient
-rw-r--r--   1 nexus nexus     5 Mar 13 08:59 port
drwxr-sr-x   2 nexus nexus  4096 Mar 13 08:59 restore-from-backup
drwxr-sr-x   7 nexus nexus  4096 Mar 13 09:00 tmp
sh-4.2$ touch test-file
sh-4.2$ ls -l test-file
-rw-r--r-- 1 nexus nexus 0 Mar 13 09:13 test-file
sh-4.2$ mkdir test-dir
sh-4.2$ ls -l test-dir
total 0
sh-4.2$ ls -ld test-dir
drwxr-sr-x 2 nexus nexus 4096 Mar 13 09:13 test-dir

Đó là sức mạnh của SetGID :)

Bây giờ hãy kiểm tra dịch vụ có hoạt động hay không. Tôi sử dụng minikube để chạy một cụm kubernetes:

chris@XPS-13-9350 ~ $ minikube service nexus3-service --url
http://192.168.39.95:30390
chris@XPS-13-9350 ~ $ curl -u admin:admin123 http://192.168.39.95:30390/service/metrics/ping
pong

Dịch vụ đang hoạt động như mong đợi.


0

Về nhận xét của Torsten Bronger , khi bạn định cấu hình Cấu hình và Bí mật trong mảng âm lượng trong thông số nhóm, bạn có thể chỉ định các quyền để cho phép truy cập bạn muốn sử dụng thuộc tính, vì vậy trong khi bạn không thể đặt quyền sở hữu nhóm và người dùng, bạn có thể cho phép các tiến trình trong nhóm đọc các tệp trong các giá trị gắn kết đó. Viết vào một bản đồ bí mật hoặc cấu hình không thực sự có ý nghĩa và dù sao thì chế độ cấp phép mặc định là 755 vì vậy việc đọc không phải là vấn đề đối với bất kỳ người dùng nào.defaultMode

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.