首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用网络策略后Kubernetes运行状况检查失败

启用网络策略后Kubernetes运行状况检查失败
EN

Stack Overflow用户
提问于 2020-10-16 03:45:35
回答 1查看 1.1K关注 0票数 3

仅启用出口网络策略时,所有就绪和活跃性检查都会在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在应用网络策略之前已经处于健康状态,它将继续工作。

我还尝试使用此策略将每个名称空间列入白名单:

代码语言:javascript
复制
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网络。

EN

回答 1

Stack Overflow用户

发布于 2020-10-16 07:28:54

看起来kube-probe使用了AKS中每个pod cidr的.1地址。我相信这将是在代理池VM上分配给linux网桥的地址,因此主机选择它作为通向pods的最便宜的路由。

没有这个地址的pod,所以我看不出选择器怎么能匹配它,除非AKS在他们的implementation中内置了一些魔法。

代码语言:javascript
复制
kubectl get pods --all-namespaces -o json \
  | jq -r '.items[] | [ .status.podIP, .metadata.name ] | join("\t")'

该策略可以针对所有pod CIDR的源.1 IP制定特定规则。

代码语言:javascript
复制
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

代码语言:javascript
复制
  ingress:
  - from:
    - ipBlock:
        cidr: 10.212.0.1/32
    - ipBlock:
        cidr: 10.212.1.1/32

这有点可怕,因为它是针对每个群集和每个节点池的配置。我只涉猎AKS,所以可能会有更好的解决方案。如果你找不到其他东西,我会在https://github.com/Azure/AKS/上提交一个bug

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64378694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档