【问题标题】:Allow egress from a Kubernetes pod to only specific FQDN/DNS with Azure CNI Network Policies使用 Azure CNI 网络策略仅允许从 Kubernetes pod 出站到特定的 FQDN/DNS
【发布时间】:2021-12-06 16:20:41
【问题描述】:

如何通过 Azure CNI 网络策略将来自 Kubernetes pod 的出口限制为仅特定的 FQDN/DNS?

这可以通过以下方式实现:

Istio

apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:
  name: googleapis
  namespace: default
spec:
  destination:
      service: "*.googleapis.com"
  ports:
      - port: 443
        protocol: https

纤毛

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "fqdn"
spec:
  endpointSelector:
    matchLabels:
      app: some-pod
  egress:
  - toFQDNs:
    - matchName: "api.twitter.com"  
  - toEndpoints:
    - matchLabels:
        "k8s:io.kubernetes.pod.namespace": kube-system
        "k8s:k8s-app": kube-dns
    toPorts:
    - ports:
      - port: "53"
        protocol: ANY
      rules:
        dns:
        - matchPattern: "*"

OpenShift

apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
  name: default-rules 
spec:
  egress: 
  - type: Allow
    to:
      dnsName: www.example.com
  - type: Deny
    to:
      cidrSelector: 0.0.0.0/0

如何使用 Azure CNI 网络策略完成类似的操作?

【问题讨论】:

    标签: kubernetes azure-aks fqdn kubernetes-networkpolicy cni


    【解决方案1】:

    AKS 不支持具有 FQDN/DNS 规则的 ATM 网络策略。

    如果您使用 Azure CNI 和 Azure Policy 插件,您将获得默认的 Kubernetes 网络策略。

    如果您使用 Azure CNI 和 Calico Policy 插件,您将获得像全球网络政策这样的高级可能性,但不是 FQDN/DNS 之一。不幸的是,这是 Calico Cloud 上的一项付费功能。

    【讨论】:

    • 谢谢菲利普·韦尔兹。你的回答很有帮助。
    • 不客气!
    【解决方案2】:

    应用 K8s 网络策略

    `

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-rules
    spec:
      podSelector:
        matchLabels:
          role: pod_role
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
        - host: www.example.com
    

    `

    参考https://kubernetes.io/docs/concepts/services-networking/network-policies/

    【讨论】:

    • 感谢您的输入 Vishnu Atrai,但您可以从您发布的 k8s 文档的参考中了解到,文档中未提及 -host 字段。我已经尝试过类似的方法,但收到此错误消息:error: error validating data: ValidationError(NetworkPolicy.spec.egress[0].to[1]): unknown field "host" in io.k8s.api.networking.v1.NetworkPolicyPeer; if you choose to ignore these errors, turn validation off with --validate=false K8s 网络 api 中不存在字段主机
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2020-10-06
    • 2019-01-21
    • 2020-06-16
    • 1970-01-01
    • 2021-04-02
    • 2018-10-10
    • 2020-11-15
    相关资源
    最近更新 更多