kubernetes - 如何使用导出网络策略允许访问 kubernetes api?

标签 kubernetes project-calico kubernetes-networkpolicy

使用 kubectl get pod 初始化容器命令用于获取其他 pod 的就绪状态。

开启 Egress NetworkPolicy 后,init 容器无法访问 Kubernetes API:Unable to connect to the server: dial tcp 10.96.0.1:443: i/o timeout . CNI 是印花布。

尝试了几个规则,但没有一个有效(服务和主主机 IP,不同的 CIDR 掩码):

...
  egress:
  - to:
    - ipBlock:
        cidr: 10.96.0.1/32
    ports:
    - protocol: TCP
      port: 443
...

或使用命名空间(默认和 kube-system 命名空间):
...
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          name: default
    ports:
    - protocol: TCP
      port: 443
...

看起来像 ipBlock规则不起作用,命名空间规则不起作用,因为 kubernetes api 是非标准 pod。

可以配置吗? Kubernetes 是 1.9.5,Calico 是 3.1.1。

GKE 1.13.7-gke.8 和 calico 3.2.7 仍然存在问题

最佳答案

更新 : 试试Dave McNeill's answer第一的。
如果它对您不起作用(对我有用!),以下可能是一种解决方法:

  podSelector:
    matchLabels:
      white: listed
  egress:
    - to:
        - ipBlock:
            cidr: 0.0.0.0/0
这将允许访问 API 服务器 - 以及互联网上的所有其他 IP 地址:-/
您可以将其与 DENY all non-whitelisted traffic from a namespace 结合使用拒绝所有其他 pod 的导出的规则。

关于kubernetes - 如何使用导出网络策略允许访问 kubernetes api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102943/

相关文章:

python - Airflow - ModuleNotFoundError : No module named 'kubernetes'

docker - Kubernetes Calico节点 'XXXXXXXXXXX'已使用IPv4地址XXXXXXXXX,CrashLoopBackOff

docker - 直接从同一网络中的机器访问 kubernetes pod

kubernetes networkpolicy namespaceSelector 当命名空间没有标签时选择

kubernetes - Kubernetes Pod 无法建立 RTSP session ,UDP 端口不可达

kubernetes - GCP的K8上的标签值无效

kubernetes - 如何从外部访问位于minikube中的服务

kubernetes - 从Prometheus抓取时的“no token found”

Kubernetes DNS 不再解析名称

kubernetes - 如何使用 Kubernetes 在 Docker for Mac 中启用网络策略