У меня есть два контроллера входа: один с классом по умолчанию nginx
в пространстве имен default
, а второй контроллер входа имеет nginx class: nginx-devices
.
Cert-manager уже установлен с помощью Helm.
Мне удалось получить сертификат TLS от Lets Encrypt для первого контроллера, используя ClusterIssuer
и правила ресурсов входа для маршрутизации Ingress
.
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
# name: letsencrypt-staging
name: letsencrypt-prod
spec:
acme:
email: xx
# server: https://acme-staging-v02.api.letsencrypt.org/directory
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# name: letsencrypt-staging
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Маршрутизация входящего трафика:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: serviceA-ingress-rules
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- FirstService.cloudapp.azure.com
secretName: tls-secret
rules:
- host: FirstService.cloudapp.azure.com
http:
paths:
- path: /serviceA
backend:
serviceName: serviceA
servicePort: 80
Однако для создания второго сертификата TLS для второго контроллера входящего трафика секрет TLS не создается.
ClusterIssuer
# k8s/cluster-issuer.yaml
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
# name: letsencrypt-staging
name: letsencrypt-prod-devices
namespace: ingress-nginx-devices # namespace where the second ingress controller is installed
spec:
acme:
email: xxx
# server: https://acme-staging-v02.api.letsencrypt.org/directory
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# name: letsencrypt-staging
name: letsencrypt-prod-devices
solvers:
- http01:
ingress:
class: nginx-devices # ingress class of the second ingress controller
входящая маршрутизация
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: devices-ingress-rules
namespace: default # since all the services are in default namespace
annotations:
kubernetes.io/ingress.class: nginx-devices # ingress class of the second ingress controller
cert-manager.io/cluster-issuer: "letsencrypt-prod-devices"
ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- secondService.cloudapp.azure.com
secretName: tls-secret
rules:
- host: secondService.cloudapp.azure.com
http:
paths:
- path: /serviceB
backend:
serviceName: serviceB
servicePort: 80
глядя на секрет, я вижу только: kubectl get secrets -n ingress-nginx-devices
NAME TYPE DATA AGE
default-token-xzp95 kubernetes.io/service-account-token 3 92m
nginx-ingress-devices-backend-token-pd4vf kubernetes.io/service-account-token 3 64m
nginx-ingress-devices-token-qvvps kubernetes.io/service-account-token 3 64m
sh.helm.release.v1.nginx-ingress-devices.v1 helm.sh/release.v1 1 64m
в то время как в пространстве имен по умолчанию:
tls-secret kubernetes.io/tls 2 134m
Почему не генерируется второй tls-секрет? что здесь могло пойти не так?
Любая помощь приветствуется :)