1

我有两个区域,每个区域都有主节点。今天我创建了一个简单的 ingress-nginx 控制器,并成功地将 DNS 指向test.example.comzone-1. 但现在我想在其中创建另一个 nginx-controllerzone-2并使用云 DNS 指向test.example.com该区域的公共 IP 地址。我应该采取什么方法?有没有最佳实践?

4

1 回答 1

0

您的问题不清楚,需要通过任何最小的可重现示例来改进。你可以在这里找到手册

根据您的主题,您在裸机中使用 Kubernetes 集群,但是您提到使用云 DNS。您从哪里获得云 DNS?

如果您使用的是纯裸机,请考虑使用MetalLB

MetalLB 为不在受支持的云提供商上运行的 Kubernetes 集群提供网络负载均衡器实现,从而有效地允许在任何集群中使用 LoadBalancer 服务。

但是这种方法还有一些其他的限制需要注意,其中之一是关于 Ingress 状态:

  • 因为 NodePort 服务没有得到定义分配的 LoadBalancerIP,NGINX Ingress 控制器不会更新它管理的 Ingress 对象的状态
$ kubectl get ingress
NAME           HOSTS               ADDRESS   PORTS
test-ingress   myapp.example.com             80

尽管没有负载均衡器向 NGINX Ingress 控制器提供公共 IP 地址,但可以通过设置 ingress-nginx 服务的 externalIPs 字段来强制所有托管 Ingress 对象的状态更新。

请看下面的例子:

给定以下 3 节点 Kubernetes 集群(以添加外部 IP 为例,在大多数裸机环境中,此值为 )

$ kubectl get node
NAME     STATUS   ROLES    EXTERNAL-IP
host-1   Ready    master   203.0.113.1
host-2   Ready    node     203.0.113.2
host-3   Ready    node     203.0.113.3

可以编辑ingress-nginx服务并将以下字段添加到对象规范

spec:
  externalIPs:
  - 203.0.113.1
  - 203.0.113.2
  - 203.0.113.3

这反过来会反映在 Ingress 对象上,如下所示:

$ kubectl get ingress -o wide
NAME           HOSTS               ADDRESS                               PORTS
test-ingress   myapp.example.com   203.0.113.1,203.0.113.2,203.0.113.3   80

在此处查看更多详细信息

于 2021-11-15T15:08:54.133 回答