我正在尝试弄清楚如何让此设置发挥作用:
- 我正在使用由 AWS 中的 kops 衍生的 Kube 1.7(无 RBAC)
- 我的整个集群有一个 nginx 入口 Controller ,该 Controller 在通过 Helm 安装的命名空间中使用
kube-system
中的LoadBalancer
服务 - 我在
kube-system
中设置了cert-manager
,通过 Helm 和 使用ClusterIssuers
- 我在通过 Helm 安装的
kube-system
中设置了external-dns
- 我有多个应用程序,每个命名空间一个,每个命名空间中都有关联的
Ingress
对象。 - 我使用
cert-manager
(certmanager.k8s.io/cluster-issuer: Letsencrypt-prod
) 和的适当注释对 Ingress 进行注释外部 DNS
(dns.alpha.kubernetes.io/external: app.contoso.com
)
在这种情况下,cert-manager
对 Ingress
对象做出适当的 react (修改它以完成 ACME 挑战),但是 external-dns
code> 没有执行任何操作(日志显示所有主机名都是最新的)。如果我手动为与 LB 服务关联的 ELB 添加 Route53 记录,一切都会按预期进行。检查 Ingress 对象,我看到状态 block 如下所示:
status:
loadBalancer:
ingress:
- {}
我想这就是为什么 external-dns
没有反应的原因?我该如何让它发挥作用?根据文档
更多故障排除信息(Pod 定义、入口定义、 Controller 日志等)可以在此处找到:https://gist.github.com/DWSR/f6d596850346223393bec23b289c9731
最佳答案
我自己解决了这个问题。 nginx 入口 Controller 有一个 --publish-service
命令行参数,这将导致它更新入口对象上的状态字段,进而导致 external-dns
创建适当的 DNS 记录。通过 Helm 安装时,只需将 .Values.controller.publishService.enabled
设置为 true
即可生效。
来源:
关于amazon-web-services - 让外部 DNS 与 Kops AWS 1.7 K8s 集群中的入口对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49618559/