You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置NetworkPolicy:实现Minikube下kubectl运行及EKS Pod访问控制平面

问题解答

一、Minikube环境下支持kubectl正常运行的NetworkPolicy

如果是集群内Pod中运行kubectl(比如在Pod里执行kubectl操作集群),需配置NetworkPolicy允许Pod出口流量访问Minikube控制平面:

  • Minikube控制平面默认监听节点IP的8443端口,节点IP可通过minikube ip命令获取
  • 示例配置如下:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-kubectl-minikube
  namespace: your-namespace
spec:
  podSelector:
    matchLabels:
      app: your-kubectl-pod # 替换为目标Pod的标签
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: <minikube-node-ip>/32 # 替换为minikube节点IP
    ports:
    - protocol: TCP
      port: 8443
  # 若需其他Pod访问该kubectl Pod,添加Ingress规则,否则可忽略
  ingress:
  - from:
    - podSelector: {} # 按需调整来源范围

如果是本地kubectl访问Minikube集群,NetworkPolicy不影响该通信——NSP仅管控集群内Pod的流量,本地kubectl直接与Minikube节点上的API Server通信,不受NSP限制。

二、EKS环境下让Pod访问控制平面的NetworkPolicy配置

现有kubectl-policy仅允许Pod访问集群内kube-system和本namespace的Pod,但EKS控制平面是AWS托管的外部Endpoint,不在集群Pod范围内,需添加Egress规则允许Pod访问控制平面地址:

1. 获取EKS控制平面信息

执行命令获取API Server地址:

kubectl cluster-info

输出中Kubernetes control plane对应的地址即为控制平面Endpoint,可通过以下命令解析其IP:

nslookup $(kubectl cluster-info | grep 'Kubernetes control plane' | awk '{print $NF}' | sed 's/https:\/\///')

2. 修改现有NetworkPolicy

在egress部分新增访问控制平面的规则,修改后的配置如下:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: "kubectl-policy"
  namespace: "ns-where-the-pod-lives"
spec:
  podSelector:
    matchLabels:
      app: "virtualdesktop"
  policyTypes:
    - "Ingress"
    - "Egress"
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "kube-system"
          podSelector: {}
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "default"
          podSelector: {}
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "ns-where-the-pod-lives"
          podSelector: {}
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "kube-system"
          podSelector: {}
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "ns-where-the-pod-lives"
          podSelector: {}
    # 新增:允许访问EKS控制平面
    - to:
        - ipBlock:
            cidr: <control-plane-ip>/32 # 替换为EKS控制平面IP
      ports:
        - protocol: TCP
          port: 443
    # 若Pod需解析控制平面域名,现有kube-system访问规则已覆盖集群DNS(coredns/kube-dns)

关键说明

  • 必须允许443端口,K8S API Server默认使用HTTPS通信
  • 优先指定具体控制平面IP,比允许0.0.0.0更安全
  • 若集群DNS部署在非kube-systemnamespace,需补充对应Egress规则

内容的提问来源于stack exchange,提问作者Jeroen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:20:57