仅启用出口网络策略时,所有就绪和活跃性检查都会在pods重启后失败。
这是我在描述pod时看到的:
警告不健康115s (x7超过2m55s) kubelet,就绪探测失败: Get http://10.202.158.105:80/health/ready:拨号tcp 10.202.158.105:80: connect:连接拒绝警告不健康115s (x7超过2m55s) kubelet,活动探测失败: Get http://10.202.158.105:80/health/live:拨号tcp 10.202.158.105:80: connect:连接被拒绝
如果我禁用这些策略,运行状况检查将立即恢复工作。如果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 Services内部运行,并使用Calico网络。
发布于 2020-10-16 07:28:54
看起来kube-probe使用了AKS中每个pod cidr的.1地址。我相信这将是在代理池VM上分配给linux网桥的地址,因此主机选择它作为通向pods的最便宜的路由。
没有这个地址的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/上提交一个bug
https://stackoverflow.com/questions/64378694
复制相似问题