Kubernetes Pod'da belirli UID ile birim nasıl monte edilir?


14

Bu yüzden, Nexus'u Kubernetes'teki bu görüntüye dayanarak çalıştırmaya çalışıyorum , ancak başarısız oluyor:

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

Belgelerden, sürecin UID 200 ile çalıştığını ve birimin bu izinlerle monte edilmesi gerektiğini söylüyor:

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.

Bu izinlerle birimi bağlamanın bir yolunu bulmak için belgeleri aramaya çalıştım, ancak bunu yapmak için herhangi bir yol bulamadım.

PVC / PV veya Dağıtım için konfigürasyonda, birimi monte etmek için hangi UID'yi belirtebileceğinizi bilen var mı? Öyleyse nasıl?


Yanıtlar:


30

' Nin UIDtanımını kullanmanın bir yolu yoktur Pod, ancak Kubernetes UIDkaynaklı hacmi kaydeder .

Böylece, ana kaptan önce başlatılan UIDby InitContainerdeğerini ayarlayabilirsiniz , sadece şu containersyolun yoluna ekleyin Deployment:

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

Harika çalışıyor. Bu saldırı için teşekkürler. Oracle DB görüntüsü ile kullanma.
Thomas Hofmann

Bu ConfigMaps ve Sırlar ile yardımcı olmaz.
Torsten Bronger

Bu benim için de işe yaradı (chmod ile de). Umarım birisi (veya Kubernetes) daha az çılgın bir yöntem uygular.
leeman24

command: ["sh", "-c", "chmod 777 /nexus && chown 200:200 /nexus"]Klasörün yazılabilir olduğundan emin olmak için bir şey kullanıyorum .
Martin Tapp

Ancak soru şu, ana kapsayıcıdaki sürecin UID'sini nasıl biliyoruz? 200 dışında bir şey de olabilir, değil mi?
Nawaz

8

Anton'un dediği gibi, Pod tanımını kullanarak UID'yi ayarlayamasak da. İşte bu konu için başka bir geçici çözüm geliyor.

Lütfen Pod veya Kapsayıcı için Güvenlik Bağlamını Yapılandırma resmi belgelerine bakın

Kullandığım kapsül tanımı:

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

Hizmet tanımı:

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

Ardından, herhangi bir izin verilmeden veya diğer hatalar olmadan kapsül ve hizmet oluşturun:

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

Nexus3 kapsayıcısına giriş yapmaya ve / nexus-data sahibini / iznini kontrol etmeyi deneyin:

# 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$

Gördüğünüz gibi, dizin root: nexus'a aittir ve dizindeki dosyaları da kontrol edebilirsiniz:

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'in gücü budur :)

Şimdi servisin çalışıp çalışmadığını kontrol edelim. Kubernetes kümesini çalıştırmak için minikube kullanıyorum:

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

Hizmet beklendiği gibi çalışıyor.


0

İlişkin Torsten Bronger 'ın comment Eğer pod spesifikasyonundaki hacimleri dizideki ConfigMaps ve Sırları yapılandırmak, kullanmakta istediğiniz erişime izin vermek için izinleri belirtebilirsiniz defaultMode, bu nedenle süre bunu yapamazsınız ayarlanan grup ve kullanıcı mülkiyet, mülk seni bölmedeki işlemlerin bu bağlantılardaki dosyaları okumasına izin verebilir. Gizli veya yapılandırma haritasına yazmak gerçekten mantıklı değildir ve varsayılan izin modu 755'dir, bu nedenle okuma herhangi bir kullanıcı için sorun olmamalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.