Kubernets网络策略仅允许外部流量访问Internet

时间:2019-09-04 13:53:33

标签: kubernetes azure-kubernetes

我正在尝试在我的kubernetes群集中实施网络策略以隔离我的Pod,但我仍然使用Azure MFA进行身份验证,但仍允许它们访问Internet。

这是我尝试过的方法,但似乎无法使其正常工作。入口正在按预期工作,但是这些策略会阻止所有出口。


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress 
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: grafana-policy
  namespace: default
spec:
  podSelector:
    matchLabels: 
      app: grafana
  ingress:
  - from:
    - podSelector:
       matchLabels: 
        app: nginx-ingress

谁能告诉我我如何进行上述配置,以便我也允许互联网访问,但阻止访问其他POD的人?

3 个答案:

答案 0 :(得分:0)

你可以这样尝试吗?

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress,Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

它应该允许出口到所有目的地。但是,如果目标是Pod,则应使用同一NetworkPolicy缺少的入口规则来阻止它。

答案 1 :(得分:0)

除非有网络策略,否则Kubernetes将允许所有流量。 如果设置了网络策略,它将仅允许网络策略设置的流量,并拒绝其他所有内容。

  

默认情况下,吊舱是非隔离的;他们接受来自任何来源的流量。

     

通过具有选择它们的NetworkPolicy可以隔离它们。一旦在名称空间中选择了特定容器的任何NetworkPolicy,该容器将拒绝任何NetworkPolicy不允许的任何连接。 (名称空间中未被任何NetworkPolicy选择的其他Pod将继续接受所有流量。)

     

https://kubernetes.io/docs/concepts/services-networking/network-policies/#isolated-and-non-isolated-pods

因此,您还需要指定出口规则,以使其按照您想要的方式工作:)

答案 2 :(得分:0)

尝试在名称空间上添加默认的“拒绝所有网络”策略,然后在其后添加“允许Internet”策略。

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
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
            - 192.168.0.0/16
            - 172.16.0.0/20

这将阻止除互联网出站以外的所有流量。 在“仅允许互联网”策略中,所有专用IP都有一个例外,它将阻止Pod到Pod的通信。 如果需要DNS查找,还必须允许从kube-system到Core DNS的出口,因为default-deny-all策略将阻止DNS查询。