如何在Ubuntu上配置Kubernetes网络策略
导读:在 Ubuntu 上配置 Kubernetes 网络策略 一 前置条件与网络策略要点 确保集群已安装支持策略的 CNI 插件(如 Calico 或 Cilium),否则 NetworkPolicy 不会生效。Kubernetes 的 Ne...
在 Ubuntu 上配置 Kubernetes 网络策略
一 前置条件与网络策略要点
- 确保集群已安装支持策略的 CNI 插件(如 Calico 或 Cilium),否则 NetworkPolicy 不会生效。Kubernetes 的 NetworkPolicy 是作用于 Pod 标签选择器 的 L3–L4 ACL,通过 policyTypes: Ingress/Egress 定义入站与出站白名单规则;同一 Namespace 内对某个 Pod 的多条策略会叠加生效;若某 Namespace 中不存在任何 NetworkPolicy,则默认 允许所有进出流量。这些能力由 CNI 实现,不同插件细节略有差异。
二 安装支持策略的 CNI 插件
- 以 Calico 为例(推荐 Operator 方式,便于后续扩展):
- 安装 Operator 与自定义资源:
- kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
- kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
- 验证 Calico 组件就绪:
- kubectl get pods -n calico-system
- 安装 Operator 与自定义资源:
- 如使用 kubeadm 搭建集群,初始化时可指定 Pod 网段(与所用 CNI 规划保持一致),例如:
- kubeadm init --pod-network-cidr=10.244.0.0/16
- 其他常见选择包括 Cilium(同样支持 NetworkPolicy),安装步骤以官方文档为准。
三 快速上手示例
- 命名空间与业务示例
- 创建命名空间与示例应用:
- kubectl create ns demo
- kubectl run web --image=nginx:1.25 -n demo --labels=app=web --expose --port=80
- kubectl run db --image=busybox:1.36 -n demo --labels=app=db -it --rm --restart=Never – sh
- 创建命名空间与示例应用:
- 示例一 仅允许同命名空间访问 web 的 80 端口
- 策略要点:podSelector 选中 app=web;仅开启 Ingress;from 使用同命名空间的 podSelector;放行 TCP/80。
- 文件:allow-same-ns.yaml
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-same-ns namespace: demo spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: web ports: - protocol: TCP port: 80 - 应用与验证:
- kubectl apply -f allow-same-ns.yaml
- 在 db Pod 中执行:curl -I http://web.demo.svc.cluster.local 应返回 200/301;从其他命名空间或未按标签的 Pod 访问将被拒绝。
- 示例二 默认拒绝整个命名空间的入站流量(再加白名单)
- 默认拒绝入站:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-ingress namespace: demo spec: podSelector: { } policyTypes: - Ingress - 仅允许来自 kube-system 的 DNS(示例):
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns namespace: demo spec: podSelector: { } policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53 - protocol: TCP port: 53 - 说明:策略是“白名单叠加”,先“全拒绝”,再按需“放行”。
- 默认拒绝入站:
四 验证与排错
- 观察策略是否生效:
- 查看策略与生效范围:kubectl get networkpolicies -n demo;kubectl describe networkpolicy allow-same-ns -n demo
- 查看应用与端点:kubectl get pods,svc -n demo;kubectl get endpoints -n demo
- 连通性测试:
- 在源 Pod 内使用 curl/ nc/ telnet 测试目标 Service DNS 名称 与 端口(例如:curl -I http://web.demo.svc.cluster.local:80)。
- 若访问被拒,优先检查:目标 Pod 标签 是否与策略 podSelector 匹配、策略是否开启正确的 policyTypes、是否存在其他策略覆盖了当前规则、以及 CNI 组件 是否健康。
- 性能与行为提示:
- 开启网络策略会对集群网络性能产生一定影响(规则越多、匹配越复杂,影响越大);不同 CNI 在策略实现与行为上存在差异,生产环境建议充分验证后再推广。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上配置Kubernetes网络策略
本文地址: https://pptw.com/jishu/757923.html
