Pod 看不到秘密

Pod does not see secrets

在相同的 default 命名空间中创建的 pod 看不到它的值。

Secret 的文件包含以下内容:

apiVersion: v1
kind: Secret
metadata:
  name: backend-secret
data:
  SECRET_KEY: <base64 of value>
  DEBUG: <base64 of value>

通过 kubectl create -f backend-secret.yaml 创建此机密后,我将使用以下配置启动 pod:

apiVersion: v1
kind: Pod
metadata:
  name: backend
spec:
  containers:
    - image: backend
      name: backend
      ports:
        - containerPort: 8000
  imagePullSecrets:
    - name: dockerhub-credentials
  volumes:
  - name: secret
    secret:
      secretName: backend-secret

但是 pod 在尝试通过 python 的 os.environ['DEBUG'] 行提取此环境变量后崩溃。

如何让它发挥作用?

如果您将 secret 安装为卷,它将安装在定义的目录中,其中键名将是文件名。例如点击 here

如果您想从环境中访问秘密到您的 pod 中,那么您需要在环境变量中使用秘密,如下所示。

apiVersion: v1
kind: Pod
metadata:
  name: backend
spec:
  containers:
    - image: backend
      name: backend
      ports:
        - containerPort: 8000
      env:
      - name: DEBUG
        valueFrom:
          secretKeyRef:
            name: backend-secret
            key: DEBUG
      - name: SECRET_KEY
        valueFrom:
          secretKeyRef:
            name: backend-secret
            key: SECRET_KEY
  imagePullSecrets:
    - name: dockerhub-credentials

参考:https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables

最后,我在 Deployment.spec.template.spec.containers:

使用了这些行
  containers:
  - name: backend
    image: zuber93/wts_backend
    imagePullPolicy: Always
    envFrom:
    - secretRef:
        name: backend-secret
    ports:
    - containerPort: 8000