我在AWS上有一个typhoon kubernetes集群,安装了nginx ingress控制器。
如果我添加一个测试入口对象,它看起来像这样:
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
default foo <none> * 10.0.8.180 80 143m
字符串
问题:我的入口控制器从哪里获得该地址(10.0.8.180)?
系统上没有(负载均衡器)服务具有该地址。(因为它是私有地址,外部dns无法正常工作。)
2条答案
按热度按时间omhiaaxx1#
为了回答你的第一个问题:
Kubernetes Ingress从哪里获取其IP地址?
我们必须深入研究代码及其行为。
这一切都从
publish-service
标志开始:字符串
标志变量(PublishSvc)稍后被分配给其他变量(PublishService):
型
在后面的代码中,你可以发现如果设置了这个标志,那么这段代码正在运行:
型
statusAddressFromService
函数作为参数接受publish-service
标志的值,并查询kubernetes中具有此名称的服务,并返回相关服务的IP地址。如果没有设置这个标志,它会在k8s中查询nginx ingress pod运行的节点的IP地址。这是你遇到的问题,它让我认为你没有设置这个标志。这也回答了你的第二个问题:
为什么它采用节点的地址而不是NLB的地址?
同时,你可以在k8s nginx ingress documentation中找到所有类型平台的所有yaml。
让我们看看AWS ingress yaml。注意这里
publish-service
有一个名为ingress-nginx/ingress-nginx-controller
(/)的值。这也是你想做的。**TLDR:**您需要做的就是创建一个LoadBalancer Service,并将
publish-service
设置为<namespace_name>/<service_name>gywdnpxw2#
根据the documentation,IP地址由入口控制器分配。