【发布时间】:2021-12-28 21:19:28
【问题描述】:
尝试遵循官方 Kubernetes 文档中给出的使用秘密作为环境变量的用例示例(引用 here),我将我的秘密和我的部署 yaml(包括一个 pod 规范)设置如下:
秘密 yaml:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
LOCAL_UID: dsdgvreRBRBBsdd=
LOCAL_PWD: MmSDkfKDODbOU4NCg==
通过执行以下操作将其写入命名空间:
kubectl apply -f my-secret.yaml
同样,这里是部署 Yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my-app
env:
- name: REPO_APP_URL
value: https://repo.myco.com/project.tar.gz
envFrom:
- secretRef:
name: my-secret
image: repo.myco.com/images/node-alpine:0.1.6
imagePullPolicy: Always
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 15
periodSeconds: 15
securityContext:
runAsUser: 1000
imagePullSecrets:
- name: regcredepg
- 上面显示的注释(但在部署 yaml 中)是服务和入口规范。
这是通过执行以下操作来运行的
kubectl apply -f my-app.yaml
这实际上效果很好:
-
imagePullSecrets指令包含在部署 YAML 中。 -
imagePullSecrets部分中给出的name值不是envFrom: - secretRef:部分中使用的实际秘密。
如果我尝试将 imagePullSecrets 名称字段的名称设置为 my-secret,则 pod 无法加载(例如 Error from server (BadRequest): container "my-app" in pod "my-app-597bb6c9b4-lh8rg" is waiting to start: image can't be pulled)。
此外,它不允许我简单地删除 pod 规范中 YAML 的 imagePullSecrets 部分,即使文档声称它是可选的。
因此,唯一可行的方法是,如果我在envFrom: - secretRef: 部分中包含对我不使用的有效机密的imagePullSecrets 引用。我确信我在这里遗漏了一些合乎逻辑的明显问题。任何人都可以阐明这一点吗??
【问题讨论】:
-
嗨@KimGentes,Reza Nasiri answer your question 的答案是什么?
-
@MikolajS。显然,是的,他提出了正确的问题。
标签: kubernetes yaml kubernetes-secrets