【问题标题】:How to restrict pod egress traffic only to external如何将 pod 出口流量限制为仅外部
【发布时间】:2021-12-18 16:21:16
【问题描述】:

我需要将 pod 出口流量限制到外部目的地。 Pod 应该能够访问 Internet 上的任何目的地,并且所有集群内部目的地都应该被拒绝。

这是我尝试过的,但没有通过验证:

apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: test
spec:
  workloadSelector:
    labels:
      k8s-app: mypod

  outboundTrafficPolicy:
    mode: REGISTRY_ONLY    

  egress: 
    - hosts:
        - 'default/*'
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: all-external

spec:
  location: MESH_EXTERNAL
  resolution: DNS
  hosts:
    - '*'
  ports:
    - name: http
      protocol: HTTP
      number: 80
    - name: https
      protocol: TLS
      number: 443

Istio 1.11.4

【问题讨论】:

  • ServiceEntry 的命名空间是什么?
  • 我在sidecar 中修复了命名空间。我的问题是:限制集群网络并允许外部一切的正确方法是什么?我猜sidecar + serviceentry 做不到。
  • 为什么不使用Network Policies?您可以使用它允许所有出口并拒绝所有入口。
  • 我只对限制出口流量感兴趣。 Pod 应该能够连接到集群外部的任何主机,而不是集群服务/pod(除了 istio sidecaristiod)。
  • 除非您的应用程序明确地向其他 pod 发出请求,否则应该没有必要限制流量。我担心完全阻塞到 Pod 的流量可能会导致 Pod 不断地无法通过健康检查,并进入 CrashLoopBackOff 状态。

标签: kubernetes istio istio-sidecar


【解决方案1】:

我是使用NetworkPolicy 完成的。允许到 kubernetes 和 istio 相关服务的流量(不仅基于命名空间可能更严格):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: myapp-eg-system

spec:
  podSelector:
    matchLabels:
      app: myapp

  policyTypes:
    - Egress

  egress:
    - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: istio-system

允许除集群网络 IP 空间之外的任何内容:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: myapp-eg-app

spec:
  podSelector:
    matchLabels:
      app: myapp

  policyTypes:
    - Egress

  egress:
    - to:
      # Restrict to external traffic
      - ipBlock:
          cidr: '0.0.0.0/0'
          except:
            - '172.0.0.0/8'

      - podSelector:
          matchLabels:
            app: myapp

      ports:
        - protocol: TCP

【讨论】:

  • @Wytrzymały-Wikto 这是我的最终解决方案
猜你喜欢
  • 2019-10-07
  • 2017-09-23
  • 2021-05-18
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多