配置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
相关产品推荐
相关产品推荐

