【问题标题】:Kubernetes pod spec requires imagePullSecrets that does NOT match referenced secret?Kubernetes pod 规范需要与引用的秘密不匹配的 imagePullSecrets?
【发布时间】: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

这实际上效果很好:

  1. imagePullSecrets 指令包含在部署 YAML 中。

  2. 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


【解决方案1】:

imagePullSecrets 的格式与 ID 和密码不同。您需要指定注册表 FQDN 以及用户名和密码。您可以在Pull an Image from a Private Registry找到更多信息。

【讨论】:

  • 很遗憾,您回答的是我没有问的问题。看:kubernetes.io/docs/concepts/configuration/secret/… 这是我正在处理的用例。它记录在 k8s 文档中,但我的问题的详细信息在我上面的帖子中进行了详细说明,这与您给出的答案无关。
  • 您遇到的问题是 kubelet 无法从您的私有容器注册表中提取映像,这是因为您的注册表需要身份验证,并且您作为 imagePullSecrets 提供的密钥没有正确的类型和格式。它与在 envFrom 中使用无关
  • 私有容器注册表是指image: repo.myco.com/images/node-alpine:0.1.6 需要 dockerconfigjson 格式的东西吗?
猜你喜欢
  • 2019-12-26
  • 2018-08-13
  • 1970-01-01
  • 2021-03-07
  • 2020-03-01
  • 2012-09-09
  • 2022-01-14
  • 2021-12-12
  • 2021-09-05
相关资源
最近更新 更多