วิธีการเมานเสียงที่มี UID เฉพาะใน Kubernetes Pod


14

ดังนั้นฉันจึงพยายามทำให้ Nexus ทำงานโดยใช้ภาพนี้ใน Kubernetes แต่ล้มเหลวด้วย:

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

จากเอกสารมันบอกว่ากระบวนการทำงานกับ UID 200 และปริมาณจะต้องประกอบเข้าด้วยสิทธิ์เหล่านั้น:

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.

ฉันพยายามค้นหาเอกสารเพื่อค้นหาวิธีการเมานต์วอลลุ่มด้วยสิทธิ์เหล่านั้นอย่างไรก็ตามฉันไม่สามารถหาวิธีที่จะทำได้

ไม่มีใครรู้ว่าคุณสามารถระบุในการกำหนดค่าสำหรับ PVC / PV หรือการปรับใช้สิ่งที่โพสต์ที่จะติดตั้งไดรฟ์ด้วย? ถ้าเป็นเช่นนั้นได้อย่างไร

คำตอบ:


31

ไม่มีวิธีตั้งค่าการUIDใช้คำนิยามของPodแต่ Kubernetes บันทึกUIDปริมาณที่มา

ดังนั้นคุณสามารถตั้งค่าUIDตามInitContainerซึ่งเปิดตัวก่อนที่ภาชนะหลักเพียงแค่เพิ่มลงในcontainersเส้นทางของDeployment:

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

ใช้งานได้ดี ขอบคุณสำหรับแฮ็คนี้ ใช้กับอิมเมจ Oracle DB
Thomas Hofmann

สิ่งนี้ไม่ได้ช่วยใน ConfigMaps and Secrets
Torsten Bronger

สิ่งนี้ใช้ได้สำหรับฉันเช่นกัน (เช่นกับ chmod) ฉันหวังว่าบางคน (หรือ Kubernetes) ใช้วิธีแฮ็กน้อย
leeman24

ฉันกำลังใช้สิ่งที่ต้องการcommand: ["sh", "-c", "chmod 777 /nexus && chown 200:200 /nexus"]เพื่อให้แน่ใจว่าโฟลเดอร์นั้นสามารถเขียนได้
Martin Tapp

แต่คำถามคือเราจะรู้ UID ของกระบวนการในคอนเทนเนอร์หลักได้อย่างไร มันอาจเป็นอะไรก็ได้นอกจาก 200 เช่นกันใช่ไหม
นาวาซ

7

อย่างที่ Anton บอกแม้ว่าเราจะไม่สามารถตั้งค่า UID โดยใช้คำจำกัดความของ Pod ที่นี่วิธีแก้ปัญหาอื่นสำหรับหัวข้อนี้มา

โปรดดูเอกสารทางการของ Kubernetes กำหนดค่าบริบทความปลอดภัยสำหรับ Pod หรือ Container

นิยามพ็อดที่ฉันใช้:

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

คำจำกัดความของบริการ:

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

จากนั้นสร้างพ็อดและบริการโดยไม่ได้รับอนุญาตใด ๆ ถูกปฏิเสธหรือเกิดข้อผิดพลาดอื่น ๆ :

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

ลองลงชื่อเข้าใช้ภาชนะ Nexus3 และตรวจสอบเจ้าของ / สิทธิ์ของ / 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$

อย่างที่คุณเห็นไดเรกทอรีเป็นของ root: nexus และคุณสามารถตรวจสอบไฟล์ในไดเรกทอรี:

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

นั่นคือพลังของ SetGID :)

ตอนนี้เรามาตรวจสอบบริการว่าใช้งานได้หรือไม่ ฉันใช้ minikube เพื่อเรียกใช้คลัสเตอร์ 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

บริการทำงานตามที่คาดไว้


0

เกี่ยวกับความคิดเห็นของTorsten Brongerเมื่อคุณกำหนดค่า ConfigMaps และความลับในอาร์เรย์โวลุ่มในข้อมูลจำเพาะของ pod คุณสามารถระบุสิทธิ์เพื่ออนุญาตการเข้าถึงที่คุณต้องการโดยใช้คุณสมบัติดังนั้นในขณะที่คุณไม่สามารถตั้งค่ากลุ่มและผู้ใช้เป็นเจ้าของได้ สามารถอนุญาตให้กระบวนการในพ็อดสามารถอ่านไฟล์ในการเมาต์เหล่านั้นได้ การเขียนไปยังแผนที่ลับหรือปรับแต่งนั้นไม่สมเหตุสมผลและโหมดการอนุญาตเริ่มต้นคือ 755 อย่างไรก็ตามการอ่านไม่ควรเป็นปัญหาสำหรับผู้ใช้ใด ๆdefaultMode

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.