В настоящее время я настраиваю Ingress в Kubernetes для работы с AWS ALB, и мне нужно управлять сертификатами TLS через диспетчер сертификатов AWS (ACM). Мне пришлось создать сертификат ACM вручную, чтобы вход работал, но я ищу способ автоматизировать этот процесс непосредственно из Kubernetes.
Вот моя текущая конфигурация Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: game-2048
name: ingress-2048
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/group.name: "application-shared-lb"
spec:
tls:
- hosts:
- snpv.cclab.cloud-castles.com
secretName: game-2048-tls
ingressClassName: alb
rules:
- host: snpv.cclab.cloud-castles.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-2048
port:
number: 80
Я нашел эту документацию об AWSPCAClusterIssuer, который создает частный сертификат ACM, но его действие прекращается только тогда, когда ingressclass является nginx и не соответствует моим потребностям.
Существует ли рекомендуемый способ или существующий инструмент для автоматизации предоставления сертификатов ACM и интеграции с Kubernetes, особенно для таких сценариев, как мой, где Ingress необходимо напрямую взаимодействовать с ресурсами AWS?
Создание общедоступного SSL-сертификата ACM на основе запроса функции EKS отслеживается здесь https://github.com/aws-controllers-k8s/community/issues/482
Контроллер AWS Loadbalancer может автоматически обнаруживать сертификат на хосте https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.5/guide/ingress/cert_discovery/#discover-via-ingress-rule -ведущий
ниже прикрепляет сертификат для dev.example.com или *.example.com к ALB
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: default name: ingress annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' spec: ingressClassName: alb rules: - host: dev.example.com http: paths: - path: /users pathType: Prefix backend: service: name: user-service port: number: 80
Я решил принять это как ответ, поскольку в настоящее время нет способа реализовать такую вещь. вместо этого мы решили сделать это с помощью terraform.