kubernetes - 从同一 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 服务呢?
解决方案
您面临的问题大多与 DNS 无关。正如您所说,您无法从其他实例访问 ClusterIP,因为它是内部集群网络,并且无法从 Kubernetes 外部访问。
我建议您不要走错方向,而是使用Nginx Ingress,它允许您创建由 AWS 负载均衡器支持的 Nginx,并在该 Nginx 上公开您的服务。
您可以进一步将 Ingress 与External-DNS插件集成,这将允许您在 Route 53 中动态创建 DNS 记录。
这需要一些时间来配置,但这是 Kubernetes 的方式。
推荐阅读
- javascript - 我在返回数组的每个值时遇到问题
- php - 警告问题:rawurlencode() 期望参数 1 是字符串,数组中给出
- java - 从终端或命令提示符(如 git 或 maven 或 java 或 javac)运行(不是在开发期间而是在生产中)java 应用程序
- java - 编写 Avro 生产者时是否需要单独的密钥架构(字段架构除外)?
- matlab - 矩阵 A 的雅可比平面旋转
- java - Android 应用程序已停止
- windows - Windows 致命异常:使用 ssd_mobilenet_v2 量化访问冲突
- java - 如何将提到的 java 对象转换为 java 中的列表对象。java 对象内部有一个列表,其中包含相同类型的对象
- android - 文件中的 Android Studio 错误但项目编译并运行:未解决的参考
- android - 什么是 Unity 2020.1.0b16 Android 支持设置错误:无法找到 untity.exe