仅启用导出网络策略时,所有准备和事件检查在 pod 重新启动后都会失败。
这是我在描述 pod 时看到的:
警告 115s 不健康(x7 超过 2m55s)kubelet,就绪探测失败:获取 http://10.202.158.105:80/health/ready :拨号 tcp 10.202.158.105:80:连接:连接被拒绝
警告 115s 不健康(x7 超过 2m55s)kubelet,活性探测失败:获取 http://10.202.158.105:80/health/live :拨号 tcp 10.202.158.105:80:连接:连接被拒绝
立即,如果我禁用这些策略,运行状况检查将恢复运行。如果 pod 在应用网络策略之前已经健康,它将继续工作。
我还尝试使用此策略将每个命名空间列入白名单:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-all
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: {}
ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 8080
我很难找到有关如何解决此问题的任何指导。是否需要启用导出策略以允许 kubelet 监控 pods 运行状况检查?
Pod 在 Azure Kubernetes 服务内部运行并使用 Calico 网络。
请您参考如下方法:
看起来 kube-probe 使用 AKS 中每个 pod cidr 的 .1 地址。我相信这将是 linux 桥在代理池 VM 上分配的地址,因此主机选择它作为到 pod 的最便宜的路由。
没有这个地址的 pod,所以我看不出它是如何被选择器匹配的,除非 AKS 的 implementation 内置了一些魔法。
kubectl get pods --all-namespaces -o json \
| jq -r '.items[] | [ .status.podIP, .metadata.name ] | join("\t")'
可以使策略与所有 pod CIDR 的源
.1 IP 的特定规则一起使用。
kubectl get nodes -o json \
| jq '.items[] | [ .metadata.name, .spec.podCIDR ]'
[
"aks-agentpool-12345678-vmss000000",
"10.212.0.0/24"
]
[
"aks-agentpool-12345678-vmss000001",
"10.212.1.0/24"
]
所以这将是每个节点的
ipBlock:
ingress:
- from:
- ipBlock:
cidr: 10.212.0.1/32
- ipBlock:
cidr: 10.212.1.1/32
这有点可怕,因为它是针对每个集群和每个节点池配置的。我只涉足 AKS,所以可能有更好的解决方案。如果你找不到其他任何东西,我会在
https://github.com/Azure/AKS/ 上提交一个错误




