Kubernetes pod 规范需要与引用的秘密不匹配的 imagePullSecrets?
Kubernetes pod spec requires imagePullSecrets that does NOT match referenced secret?
尝试按照官方 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
鉴于以下情况,这实际上非常有效:
部署 YAML 中包含 imagePullSecrets
指令。
imagePullSecrets
部分中给出的 name
值是 而不是 envFrom: - secretRef:
中使用的实际秘密部分。
如果我尝试将 imagePullSecrets
名称字段的名称设置为 my-secret
,广告连播将无法加载(显示 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
引用部分。我确定我在这里遗漏了一些逻辑上明显的问题。任何人都可以阐明这一点吗?
imagePullSecrets
的格式与 ID 和密码不同。您需要指定注册表 FQDN 以及用户名和密码。您可以在 Pull an Image from a Private Registry.
中找到更多信息
尝试按照官方 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
鉴于以下情况,这实际上非常有效:
部署 YAML 中包含
imagePullSecrets
指令。imagePullSecrets
部分中给出的name
值是 而不是envFrom: - secretRef:
中使用的实际秘密部分。
如果我尝试将 imagePullSecrets
名称字段的名称设置为 my-secret
,广告连播将无法加载(显示 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
引用部分。我确定我在这里遗漏了一些逻辑上明显的问题。任何人都可以阐明这一点吗?
imagePullSecrets
的格式与 ID 和密码不同。您需要指定注册表 FQDN 以及用户名和密码。您可以在 Pull an Image from a Private Registry.