即使定义了imagesPullSecret,GKE也无法提取图像

时间:2019-07-10 13:46:44

标签: kubernetes google-kubernetes-engine kubernetes-helm docker-registry

在Google Kubernetes Engine中,我为我们的公司创建了一个POC集群,该集群运行良好。但是现在,当我尝试创建生产环境时,似乎无法使imagesPullSecrets正常工作,它的凭证与POC,相同的掌舵图和相同的regcred yaml文件中的凭证完全相同。

但我一直在学习古典音乐:

Back-off pulling image "registry.company.co/frontend/company-web/upload": ImagePullBackOff 
  • 在节点上手动拉动的凭据与我在imagesPullSecret中提供的凭据相同
  • 我尝试在图表级别和服务帐户上定义imagesPullSecret
  • 我已经验证了机密格式,并在尝试手动提取时直接在其中复制了凭证
  • GKE提取注册表并显示在部署中

kubectl create secret docker-registry regcred --docker-server="registry.company.co" --docker-username="gitlab" --docker-password="[PASSWORD]"生成的Regcred

秘密秘密

kind: Secret
apiVersion: v1
metadata:
  name: regcred
  namespace: default
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5jb21wYW55LmNvIjp7InVzZXJuYW1lIjoiZ2l0bGFiIiwicGFzc3dvcmQiOiJbUkVEQUNURURdIiwiYXV0aCI6IloybDBiR0ZpT2x0QmJITnZJRkpsWkdGamRHVmtYUT09In19fQ==
type: kubernetes.io/dockerconfigjson

服务帐户

kind: ServiceAccount
apiVersion: v1
metadata:
  name: default
  namespace: default
secrets:
  - name: default-token-jktj5
imagePullSecrets:
  - name: regcred

Deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: nfs-server
spec:
    replicas: 1
    selector:
        matchLabels:
            role: nfs-server
    template:
        metadata:
            labels:
                role: nfs-server
        spec:
            containers:
                - name: nfs-server
                  image: gcr.io/google_containers/volume-nfs:latest
                  ports:
                      - name: nfs
                        containerPort: 2049
                      - name: mountd
                        containerPort: 20048
                      - name: rpcbind
                        containerPort: 111
                  securityContext:
                      privileged: true
                  volumeMounts:
                      - mountPath: /exports
                        name: mypvc
            initContainers:
                - name: init-volume-perms
                  imagePullPolicy: Always
                  image: alpine
                  command: ["/bin/sh", "-c"]
                  args: ["mkdir /mnt/company-logos; mkdir /mnt/uploads; chown -R 1337:1337 /mnt"]
                  volumeMounts:
                      - mountPath: /mnt
                        name: mypvc
                - name: company-web-uploads
                  image: registry.company.co/frontend/company-web/uploads
                  imagePullPolicy: Always
                  volumeMounts:
                      - mountPath: /var/lib/company/web/uploads
                        subPath: uploads
                        name: mypvc
                - name: company-logos
                  image: registry.company.co/backend/pdf-service/company-logos
                  imagePullPolicy: Always
                  volumeMounts:
                      - mountPath: /var/lib/company/shared/company-logos
                        subPath: company-logos
                        name: mypvc
            volumes:
                - name: mypvc
                  gcePersistentDisk:
                      pdName: gke-nfs-disk
                      fsType: ext4

我环顾四周,从头开始遵循不同的指南,直到成功为止。

所以我完全不知所措。

所有默认名称空间

1 个答案:

答案 0 :(得分:0)

可能是因为名称空间问题。你能验证几件事吗?

  1. 您是否在两个地方都使用默认名称空间?
  2. POC和Prod之间的
  3. K8S版本差异。
  4. 您能否通过类似kubectl get secret default-token-jktj5 -o yaml > imagepullsecret.yaml的方式来重新创建工作秘密。编辑yaml文件以删除修订和其他状态信息。将其应用于产品
  5. 由于将多行秘密转换为base64,所以我在GKE中看到了此问题。确保机密在环境之间匹配。