Kubernetes Ingress从哪里获取其IP地址?

jvidinwx  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(143)

我在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无法正常工作。)

omhiaaxx

omhiaaxx1#

为了回答你的第一个问题:
Kubernetes Ingress从哪里获取其IP地址?
我们必须深入研究代码及其行为。
这一切都从publish-service标志开始:

publishSvc = flags.String("publish-service", "", 
`Service fronting the Ingress controller 
Takes the form "namespace/name". When used together with update-status, the
controller mirrors the address of this service's endpoints to the load-balancer
status of all Ingress objects it satisfies.`)

字符串
标志变量(PublishSvc)稍后被分配给其他变量(PublishService):

PublishService: *publishSvc,


在后面的代码中,你可以发现如果设置了这个标志,那么这段代码正在运行:

if s.PublishService != "" {
return statusAddressFromService(s.PublishService, s.Client)
}


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>

gywdnpxw

gywdnpxw2#

根据the documentation,IP地址由入口控制器分配。

相关问题