微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kubernetes运行状况检查在启用网络策略的情况下失败

如何解决Kubernetes运行状况检查在启用网络策略的情况下失败

仅启用出口网络策略时,重新启动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: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监视吊舱健康状况检查?

该pod在Azure Kubernetes Services内部运行,并使用Calico网络。

解决方法

似乎kube-probe在AKS中使用每个pod cidr的.1地址。我相信这将是在代理程序池VM上分配linux网桥的地址,因此主机将其选择为到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/

上提交错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。