lea*_*man 1 external kubernetes nginx-ingress
我在尝试使用类型为 ExternalName 和入口控制器将流量重定向到外部服务时遇到问题。
我收到以下错误,我可以从主机访问该主机,但不能从 K8S 访问。此外,IP 10.96.0.10 与 kube-dns 服务相关联。
解析主机“internaldnsname.com”时出错:在 10.96.0.10:53 上查找 internaldnsname.com:没有这样的主机
我错过了什么?
入口规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: external-ingress
annotations:
kubernetes.io/ingress.class: “nginx”
nginx.ingress.kubernetes.io/ingress.class: “nginx”
nginx.ingress.kubernetes.io/preserve-host: “false”
spec:
rules:
- host:
http:
paths:
- backend:
serviceName: external-service
servicePort: 80
path: /
Run Code Online (Sandbox Code Playgroud)
服务定义
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: ExternalName
externalName: internaldnsname.com
Run Code Online (Sandbox Code Playgroud)
对正在发生的事情的解释:
kube-proxy 负责为非 ExternalName 类型的服务实现一种形式的虚拟 IP
入口控制器正在尝试解决external-service具有CNAME 的问题, internaldns.com并且当您的 kube-dns/coredns (10.96.0.10) 尝试进行查找时,它只能找到 CNAME 记录但找不到A 记录,因此,您的入口无法解析DNS 名称。
在查找主机 my-service.prod.svc.cluster.local 时,集群 DNS 服务返回值为 my.database.example.com 的 CNAME 记录
此外,网站上有关于 ExternalNames的明确警告:
您可能无法将 ExternalName 用于某些常见协议,包括 HTTP 和 HTTPS。如果您使用 ExternalName,则集群内客户端使用的主机名与 ExternalName 引用的名称不同。
TL;DR:ingress 正在尝试使用没有任何A 记录的kubernetes DNS(kube-dns/coredns)解析 DNS,因此无法将 DNS 关联到 IP!
如果入口是为了查找具有 A 记录条目的不同 DNS 服务器(除了 kubernetes DNS),internaldns.com那么这个问题可能不会发生,但我不能 100% 确定这是否可能。
解决方案: - 创建一个没有选择器的Headless 服务 ,然后使用与服务相同的名称手动创建一个端点。按照这里的例子
笔记:
| 归档时间: |
|
| 查看次数: |
4297 次 |
| 最近记录: |