LoginSignup
0
1

More than 5 years have passed since last update.

cert-managerのingress-shimのyamlを書き間違えて証明書が発行されなかった

Posted at

cert-manager + nginx-ingressで証明書が発行されないヘマをやらかしたので備忘。

その日は疲れててこんなyamlを書いてしまいました。

---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
  name: letsencrypt-staging
  namespace: mynamespace
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: email@example.com
    privateKeySecretRef:
      name: my-key-name 
    http01: {}
---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/issuer: letsencrypt-staging
    certmanager.k8s.io/acme-challenge-type: http01
  name: front-door
  namespace: mynamespace
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: my-backend-service
          servicePort: 8080
        path: /
  tls:
  - secretName: my-key-name  # <<< ※これがダメ
    hosts:
    - www.example.com

---

一見ingress-shimのドキュメントにあるようなシンプルなものですよね。

でもいつまで待っても証明書が発行できません。

原因

よく見たらingressのspec.tls.secretNameIssuerで指定したものと同じになってました。
そりゃ発行されないですよね。

ちなみにそのときのログにはこんなのが出てました。

Ingress Controllerのログ

$ kubectl logs -f -n <ingress-nginxのnamespace> <ingress controller Pod名>

W0927 00:00:00.805191      10 backend_ssl.go:48] Error obtaining X.509 certificate: Secret "mynamespace/my-key-name" contains no keypair or CA certificate
W0927 00:00:00.805358      10 controller.go:1058] Error getting SSL certificate "mynamespace/my-key-name": local SSL certificate mynamespace/my-key-name was not found. Using default certificate

CertManager Controllerのログ

$ kubectl logs -f -n <cert-managerのnamespace> <cert-manager controller Pod名>

I0927 00:00:00.100894       1 controller.go:171] certificates controller: syncing item 'mynamespace/my-key-name'
E0927 00:00:00.102084       1 controller.go:180] certificates controller: Re-queuing item "mynamespace/my-key-name" due to error processing: no data for "tls.crt" in secret 'mynamespace/my-key-name'

# 同じようなログが延々続く

解決方法

単純にingressのspec.tls.secretNameIssuerで指定したものとは違うものにすればOKです。

apiVersion: extensions/v1beta1
kind: Ingress

# [...]

spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: my-backend-service
          servicePort: 8080
        path: /
  tls:
  - secretName: www.example.com.tls # <<<ここを修正
    hosts:
    - www.example.com

通常はあまり引っかからない問題と思いますが、ドキュメントからyamlをコピペして必要な箇所を直すってやるときについうっかり修正してしまうとこうなります。気をつけましょう(自戒)。

以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1