【发布时间】:2021-11-06 23:31:24
【问题描述】:
AKS 如何使未准备好的 pod 无法接受请求?仅当您在该部署之前有正确的服务时才有效?
我想首先解释一下我在未配置 azure cni 的 aks 中发现的情况,然后继续解释我在启用 azure cni 的 aks 中看到的情况。
在没有启用 cni 的 AKS 中,如果我在像 curl -I some-pod.some-service.some-namespace.svc.cluster.local:8080 这样的服务后面的未准备好的 pod 上的 url 上执行 curl,我在响应中得到的是无法解析的主机名或类似的东西。这意味着据我了解 DNS 没有此条目。这就是在正常情况下,aks 处理未准备好的 pod 以不接收请求的方式。
在启用了 azure cni 的 AKS 中,如果我在未就绪的 pod 上执行相同的请求,它能够解析主机名并能够将请求发送到 pod。但是,有一个警告是,当我尝试通过该服务的外部私有 ip 执行请求时,该请求不会到达未准备好的 pod,这是预期的并且似乎工作正常。但是,当我再次尝试执行上面提到的curl -I some-pod.some-service.some-namespace.svc.cluster.local:8080 的请求时,它可以工作,但它不应该。为什么 azure cni 的 DNS 有这个值?
我可以做些什么来将 azure cni 配置为更像 AKS 的默认行为,其中这样的 curl 请求要么无法解析该主机名,要么会拒绝连接或其他什么?
【问题讨论】:
-
通常一个 pod 具有以下 DNS 解析:
pod-ip-address.my-namespace.pod.cluster-domain.example。例如,default命名空间中的 Pod 的 IP 地址为 172.17.0.3,并且您的集群的域名为cluster.local,则该 Pod 的 DNS 名称为:172-17-0-3.default.pod.cluster.local。由 Service 公开的 Deployment 或 DaemonSet 创建的任何 pod 都具有以下可用的 DNS 解析:pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example。您能否相应地编辑您尝试访问的 FQDN?
标签: azure kubernetes azure-aks cni