Sobes.tech
Middle+

Hogyan fogja a Kubernetes frissíteni a titkosításokat, ha hat replikapodom van ugyanazzal a titokkal?

sobes.tech MI

Válasz az MI-től

A Kubernetes nem frissíti közvetlenül a titkos adatokat (secrets) a pod futása közben. A podok egy pontos másolatát használják a titkos adatnak, amely a futtatásuk pillanatában létezett.

Annak érdekében, hogy a podok "lássák" a frissített titkos adatot, újra kell indítani őket vagy újra kell őket létrehozni. Népszerű stratégiák erre:

  • Rolling Update (Folyamatos frissítés): A régi podokat fokozatosan helyettesítik az új, frissített titkos adatokat tartalmazó podokkal. Ez az alapértelmezett stratégia a Deployment-ok esetében.

  • Recreate (Újra létrehozás): Minden régi podot egyszerre törölnek, majd újakat hoznak létre. Ez rövid szolgáltatáskimaradást okoz.

  • Blue/Green Deployment: Egy teljesen új verzió (frissített titkos adattal) párhuzamosan fut a régi verzióval. Ellenőrzés után az összes forgalom az új verzióra irányul, a régi pedig törlésre kerül.

  • Canary Release: Egy új verzió (frissített titkos adattal) egy kis felhasználói csoportnak kerül bevezetésre, majd fokozatosan növelik a forgalmat rá.

A ConfigMap-ek és Secrets-ek fájlként való csatolásával a titkos adat változásai automatikusan frissülhetnek a már futó podon belül, de ez késleltetve történik (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Azonban, például, a titkos adat környezeti változóként való használatához, a pod újraindítása szükséges.

Példa a Deployment frissítésére Rolling Update használatával:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 6
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate # Alapértelmezett stratégia
    rollingUpdate:
      maxUnavailable: 1 # Maximális nem elérhető podok száma az frissítés során
      maxSurge: 1       # Maximális új podok száma a kívánt replikaszám felett
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
        env:
        - name: MY_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: my-secret # A titok neve
              key: my-key     # A titok kulcsa

A my-secret titok módosítása után, frissíteni kell a Deployment-et (például az image verziójának módosításával vagy egy annotáció hozzáadásával), hogy elinduljon a Rolling Update:

kubectl apply -f deployment.yaml

A Kubernetes észreveszi a Deployment specifikációjában történt változásokat, és elkezdi létrehozni az új podokat, amelyek hozzáférnek a frissített titokhoz. A régi podok pedig leállnak.