Cert-Manager не выдает никаких сертификатов Google Cloud Kubernetes - PullRequest
0 голосов
/ 23 февраля 2020

Я изо всех сил пытаюсь заставить cert-manager выдавать сертификаты из зашифрованного файла, который я могу использовать со своим входом в Google Cloud Kubernetes.

У меня работает кластер с развертыванием, обслуживанием и входом в пространство имен по умолчанию. Я также зарегистрировал домен на namecheap и добавил запись A в IP-адрес моего входа. Теперь я могу зайти на сайт с http и все в порядке. Теперь я хочу перейти на https, и все не работает.

Я установил cert-manager:

kubectl create namespace cert-manager
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.13.1/cert-manager.yaml

Я проверил, что cert-manager работает:

kubectl get pods --namespace cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5655447474-kw9k7              1/1     Running   0          99m
cert-manager-cainjector-59c9dfd4f7-fjzbf   1/1     Running   0          99m
cert-manager-webhook-865b8fb666-7kmx2      1/1     Running   0          99m

Теперь я создал ClusterIssuer kubectl apply -f letsencrypt-prod.yaml в пространстве имен по умолчанию:

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: 'my@email.com'
    privateKeySecretRef:
      name: letsencrypt-prod
    http01: {}

И добавил сертификат с kubectl apply -f certificate.yaml:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: my-certs
spec:
  secretName: my-certs
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  commonName: "www.mydomain.de"
  dnsNames:
  - "www.mydomain.de"
  acme:
    config:
    - dns01:
        provider: cloud-dns
      domains:
      - "www.mydomain.de"

Это мой вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-ip"
spec:
  rules:
  - host: www.mydomain.de
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 80
  tls:
  - hosts:
    - www.mydomain.de
    secretName: my-certs

Теперь, когда я запускаю kubectl describe certificate my-certs, нет событий:

kubectl describe certificate my-certs
Name:         my-certs
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"certmanager.k8s.io/v1alpha1","kind":"Certificate","metadata":{"annotations":{},"name":"my-certs","namespace":"default"},"sp...
API Version:  certmanager.k8s.io/v1alpha1
Kind:         Certificate
Metadata:
  Creation Timestamp:  2020-02-23T13:30:15Z
  Generation:          1
  Resource Version:    787204
  Self Link:           /apis/certmanager.k8s.io/v1alpha1/namespaces/default/certificates/my-certs
  UID:                 a027a698-5640-11ea-bce8-42010a9c00dc
Spec:
  Acme:
    Config:
      Dns 01:
        Provider:  cloud-dns
      Domains:
        www.mydomain.de
  Common Name:  www.mydomain.de
  Dns Names:
    www.mydomain.de
  Issuer Ref:
    Kind:       ClusterIssuer
    Name:       letsencrypt-prod
  Secret Name:  my-certs
Events:         <none>

И в Google Cloud Console я вижу сообщение «Не удалось найти сертификаты TLS. Продолжается настройка балансировщика нагрузки служить HTTP "для входа.

Что здесь не так или что мне не хватает?

1 Ответ

0 голосов
/ 23 февраля 2020

Вместо того, чтобы создавать ресурс сертификата вручную, вы можете добавить аннотацию ниже к входному ресурсу:

cert-manager.io/issuer: "letsencrypt-prod"

Cert-manager будет читать аннотацию и использовать их для создания сертификата.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-ip"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  rules:
  - host: www.mydomain.de
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 80
  tls:
  - hosts:
    - www.mydomain.de
    secretName: my-certs

После этого проверьте, создан ли секрет и сертификат с именем my-certs или нет.

Также проверьте связанный вопрос

...