【问题标题】:kubectl - cert manager - credentials not foundkubectl - 证书管理器 - 未找到凭据
【发布时间】:2018-12-14 16:18:23
【问题描述】:

我想在谷歌云平台上的入口(在 kubernetes 之上)启用 TLS 终止。

我的入口集群正在工作,我的证书管理器失败并显示错误消息

textPayload:  "2018/07/05 22:04:00 Error while processing certificate during sync: Error while creating ACME client for 'domain': Error while initializing challenge provider googlecloud: Unable to get Google Cloud client: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: open /opt/google/kube-cert-manager.json: no such file or directory
"  

这是我为了进入当前状态所做的:

  • 已创建集群、部署、服务、入口
  • 执行:

    gcloud --project 'project' iam service-accounts create kube-cert-manager-sv-security --display-name "kube-cert-manager-sv-security"

    gcloud --project 'project' iam service-accounts 密钥创建 ~/.config/gcloud/kube-cert-manager-sv-security.json --iam-account kube-cert-manager-sv-security@'项目'.iam.gserviceaccount.com

    gcloud --project 'project' 项目 add-iam-policy-binding --member serviceAccount:kube-cert-manager-sv-security@'project'.iam.gserviceaccount.com --role roles/dns.admin

    kubectl create secret generic kube-cert-manager-sv-security-secret --from-file=/home/perre/.config/gcloud/kube-cert-manager-sv-security.json

并创建了以下资源:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kube-cert-manager-sv-security-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-cert-manager-sv-security
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
    name: kube-cert-manager-sv-security
rules:
  - apiGroups: ["*"]
    resources: ["certificates", "ingresses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["*"]
    resources: ["secrets"]
    verbs: ["get", "list", "create", "update", "delete"]
  - apiGroups: ["*"]
    resources: ["events"]
    verbs: ["create"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: kube-cert-manager-sv-security-service-account
subjects:
  - kind: ServiceAccount
    namespace: default
    name: kube-cert-manager-sv-security
roleRef:
  kind: ClusterRole
  name: kube-cert-manager-sv-security
  apiGroup: rbac.authorization.k8s.io
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: certificates.stable.k8s.psg.io
spec:
  scope: Namespaced
  group: stable.k8s.psg.io
  version: v1
  names:
    kind: Certificate
    plural: certificates
    singular: certificate
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: kube-cert-manager-sv-security
  name: kube-cert-manager-sv-security
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: kube-cert-manager-sv-security
      name: kube-cert-manager-sv-security
    spec:
      serviceAccount: kube-cert-manager-sv-security
      containers:
        - name: kube-cert-manager
          env:
          - name: GCE_PROJECT
            value: solidair-vlaanderen-207315
          - name: GOOGLE_APPLICATION_CREDENTIALS
            value: /opt/google/kube-cert-manager.json
          image: bcawthra/kube-cert-manager:2017-12-10
          args:
            - "-data-dir=/var/lib/cert-manager-sv-security"
            #- "-acme-url=https://acme-staging.api.letsencrypt.org/directory"
            # NOTE: the URL above points to the staging server, where you won't get real certs.
            # Uncomment the line below to use the production LetsEncrypt server:
            - "-acme-url=https://acme-v01.api.letsencrypt.org/directory"
            # You can run multiple instances of kube-cert-manager for the same namespace(s),
            # each watching for a different value for the 'class' label
            - "-class=kube-cert-manager"
            # You can choose to monitor only some namespaces, otherwise all namespaces will be monitored
            #- "-namespaces=default,test"
            # If you set a default email, you can omit the field/annotation from Certificates/Ingresses
            - "-default-email=viae.it@gmail.com"
            # If you set a default provider, you can omit the field/annotation from Certificates/Ingresses
            - "-default-provider=googlecloud"
          volumeMounts:
            - name: data-sv-security
              mountPath: /var/lib/cert-manager-sv-security
            - name: google-application-credentials
              mountPath: /opt/google
      volumes:
        - name: data-sv-security
          persistentVolumeClaim:
            claimName: kube-cert-manager-sv-security-data
        - name: google-application-credentials
          secret:
            secretName: kube-cert-manager-sv-security-secret

有人知道我错过了什么吗?

【问题讨论】:

  • 这个问题应该迁移到Server Fault那里会得到更好的解决。

标签: google-cloud-platform google-kubernetes-engine kubernetes-ingress


【解决方案1】:

您的秘密资源kube-cert-manager-sv-security-secret 可能包含一个名为kube-cert-manager-sv-security.json 的JSON 文件,它与GOOGLE_APPLICATION_CREDENTIALS 值不匹配。您可以使用kubectl get secret -oyaml YOUR-SECRET-NAME 确认秘密资源中的文件名。

因此您将文件路径更改为实际文件名,cert-manager 工作正常。

- name: GOOGLE_APPLICATION_CREDENTIALS
#  value: /opt/google/kube-cert-manager.json
  value: /opt/google/kube-cert-manager-sv-security.json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2022-06-21
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多