在GKE中应用出口网络策略后,无法从Pod连接Internet

时间:2020-09-19 12:37:06

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress gke-networking

应用出口网络策略kubectl run app1 --image tomcat:7.0-slim命令无法连接互联网后,我在GKE中有一个吊舱(apt-get update)。

应用政策之前:

enter image description here

应用策略后:

enter image description here

这是适用的政策:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app2-np
  namespace: default
spec:
  podSelector:
    matchLabels:
      name: app2
  policyTypes:
  - Egress
  - Ingress
  ingress:
  - {}
  egress:
  - to:
    - podSelector:
        matchLabels:
          name: app3
    ports:
    - port: 8080

  - ports:
    - port: 80
    - port: 53
    - port: 443

此处可以在相同名称空间中连接app3 pod的8080端口。请帮助纠正我的netpol。

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为您仅在端口8080上为app3定义了出口规则,这将阻止所有Internet连接尝试。

如果您需要从某些吊舱中使用访问Internet,则可以标记它们并创建NetworkPOlicy以允许访问Internet。

在下面的示例中,标记为networking/allow-internet-egress: "true"的广告连播将可以访问互联网:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: internet-egress
spec:
  podSelector:
    matchLabels:
      networking/allow-internet-egress: "true"
  egress:
  - {}
  policyTypes:
  - Egress

另一个选项是ip阻止,在下面的示例中,规则将允许ipBlocks 0.0.0.0

的Internet访问(10.0.0.0/8除外
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-internet-only
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
      - ipBlock:
        cidr: 0.0.0.0/0
          except:
            - 10.0.0.0/8

最后,在this网站上,您可以很好地可视化NetworkPolices,以了解确切的行为。

参考:

https://www.stackrox.com/post/2020/01/kubernetes-egress-network-policies/

Kubernets networkpolicy allow external traffic to internet only