首页 > 解决方案 > 从同一 VPC 中的工作程序节点和其他 EC2 实例访问 EKS DNS

问题描述

我按照 AWS 的入门指南使用 k8s 版本 1.11 创建了一个 EKS 集群。我没有为 kube-dns 更改任何配置。如果我创建一个服务,比如说 myservice,我想从其他不属于该 eks 集群的 ec2 实例访问它,但它位于同一个 VPC 中。基本上,我希望这个 DNS 也可以作为集群外部实例的 DNS 服务器。我将如何做到这一点?

我已经看到 kube-dns 服务获得了集群 IP 但没有获得外部 IP,我是否需要能够从集群外部访问它?

这是当前的响应:

[ec2-user@ip-10-0-0-149 ~]$ kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   172.20.0.10   <none>        53/UDP,53/TCP   4d

我的 VPC 子网是 10.0.0.0/16

我正在尝试从我的 VPC 中的其他实例访问此 172.20.0.10 IP,但我无法访问,我认为这是意料之中的,因为我的 VPC 不知道任何 172.20.0.10 子网范围。但是,如何让我在 VPC 中的所有实例都可以访问这个 dns 服务呢?

标签: kuberneteskube-dnsamazon-eks

解决方案


您面临的问题大多与 DNS 无关。正如您所说,您无法从其他实例访问 ClusterIP,因为它是内部集群网络,并且无法从 Kubernetes 外部访问。

我建议您不要走错方向,而是使用Nginx Ingress,它允许您创建由 AWS 负载均衡器支持的 Nginx,并在该 Nginx 上公开您的服务。

您可以进一步将 Ingress 与External-DNS插件集成,这将允许您在 Route 53 中动态创建 DNS 记录。

这需要一些时间来配置,但这是 Kubernetes 的方式。


推荐阅读