kubernetes 入口从哪里获取 IP 地址?

问题描述 投票:0回答:2

我在 aws 上有一个台风 kubernetes 集群,安装了 nginx 入口控制器。

如果我添加一个测试入口对象,它看起来像这样:

NAMESPACE   NAME   CLASS    HOSTS                ADDRESS      PORTS   AGE
default     foo    <none>   *                    10.0.8.180   80      143m

问题:我的入口控制器从哪里获取该地址(10.0.8.180)?

具有该地址的系统上没有(负载均衡器)服务。 (因为它是私有地址,external-dns 无法正常工作。)

kubernetes kubernetes-ingress nginx-ingress typhoon-kubernetes
2个回答
2
投票

为了回答你的第一个问题:

kubernetes 入口从哪里获取 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 入口文档中找到所有类型平台的所有 yaml。

让我们看一下AWS ingress yaml。 请注意,此处

publish-service
的值称为
ingress-nginx/ingress-nginx-controller
(/)。 这也是你想做的。


TLDR: 您所要做的就是创建一个 LoadBalancer 服务并将

publish-service
设置为 /


0
投票

根据文档 IP地址由入口控制器分配。

链接:https://kubernetes.io/docs/concepts/services-networking/ingress/

© www.soinside.com 2019 - 2024. All rights reserved.