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

Igo*_*pin 12 kubernetes project-calico kubernetes-networkpolicy

带有kubectl get pod命令的Init容器用于获取其他pod的就绪状态.

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

尝试了几个规则,但它们都没有工作(服务和主机主机IP,不同的CIDR掩码):

...
  egress:
  - to:
    - ipBlock:
        cidr: 10.96.0.1/32
    ports:
    - protocol: TCP
      port: 443
...
Run Code Online (Sandbox Code Playgroud)

或使用命名空间(默认和kube系统命名空间):

...
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          name: default
    ports:
    - protocol: TCP
      port: 443
...
Run Code Online (Sandbox Code Playgroud)

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

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

小智 8

您需要获取使用的主站的真实 IPkubectl get endpoints --namespace default kubernetes并制定出口策略以允许这样做。

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1 
metadata:
  name: allow-apiserver
  namespace: test
spec:
  policyTypes:
  - Egress
  podSelector: {}
  egress:
  - ports:
    - port: 443
      protocol: TCP
    to:
    - ipBlock:
        cidr: x.x.x.x/32
Run Code Online (Sandbox Code Playgroud)

  • master的IP可以改吗?如果是这样,则此配置可能会损坏。 (2认同)