阅读量:2
在 CentOS 上落地 Kubernetes 网络策略的完整流程
一 前置条件与网络插件选择
- 操作系统与组件:在 CentOS 上部署 Kubernetes(如 kubeadm 方式),并安装 kubelet/kubectl/kubeadm。初始化集群时建议指定 Pod 网段,例如:10.244.0.0/16。
- 网络插件:网络策略由 CNI 插件实现,常用有 Calico、Flannel、Weave、Cilium。其中 Flannel 默认不启用网络策略,若需策略能力请选择 Calico/Cilium 等支持 NetworkPolicy 的插件。
- 验证插件就绪:安装后确认对应 DaemonSet 已 Running,例如查看 Calico 的 Pod 状态。
以上步骤与选择要点可参考在 CentOS 上部署与验证 Kubernetes 网络及网络策略的实操示例。
二 启用网络策略的两种方式
- 方式 A(推荐)使用 Calico 启用策略
- 安装 Calico(示例清单适用于 v3.25,可按需调整版本):
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml - 确认 Calico 组件运行正常:
kubectl get pods -n kube-system | grep calico - 后续通过 Kubernetes 的 NetworkPolicy API(networking.k8s.io/v1) 下发策略即可。
- 安装 Calico(示例清单适用于 v3.25,可按需调整版本):
- 方式 B 使用 Flannel 的场景
Flannel 默认不提供策略能力。若必须使用 Flannel,可叠加 Calico 仅做策略(不替换 Flannel 的 Pod 网络),或改用 Cilium 等原生支持策略的 CNI。
以上安装与验证步骤以 Calico 为例,Flannel 的能力边界与替代方案说明可参考相应实践。
三 典型网络策略示例
- 示例 1 默认拒绝并仅放行同命名空间
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-namespace
namespace: example-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {}
egress:
- to:
- podSelector: {}
- 示例 2 按标签放行入站到 Nginx 的 80/TCP
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-nginx-ingress
namespace: example-namespace
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
access: "true"
ports:
- protocol: TCP
port: 80
- 示例 3 按命名空间放行入站(跨命名空间访问控制)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-specific-ns
namespace: python
spec:
podSelector: {} # 作用于本命名空间全部 Pod
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
nsname: linux # 仅允许带有 nsname=linux 标签的命名空间访问
ports:
- protocol: TCP
port: 8080
- 应用与验证
- 应用策略:kubectl apply -f
- 验证连通:在具备 access=true 标签的 Pod 内访问目标服务(如 http://pod2.example-namespace.svc.cluster.local 或
:80 ),未匹配策略的流量应被拒绝。
以上示例覆盖了同命名空间默认放行、按标签放行、按命名空间放行等常见场景,可直接用于验证与落地。
- 应用策略:kubectl apply -f
四 验证与排错要点
- 策略未生效的常见原因
- 使用的 CNI 不支持策略(如 Flannel 默认不支持)。
- 目标 Pod 未被任何 podSelector 命中(默认对所有 Pod 生效需使用空选择器 {})。
- 未为 Namespace 打上策略中使用的标签(如 nsname=linux)。
- 策略类型未包含 Ingress/Egress,或未对相应方向做放行。
- 快速排查清单
- 查看策略与生效范围:
kubectl get networkpolicy -A
kubectl describe networkpolicy-n - 查看 Pod 标签与 Namespace 标签是否匹配策略:
kubectl get pod-n --show-labels
kubectl get ns--show-labels - 连通性测试:在源 Pod 内使用 curl/wget 访问目标 Service DNS 或 PodIP:Port。
- 查看 CNI 组件状态:
kubectl get pods -n kube-system | grep -E “calico|flannel|cilium” - 主机侧网络:确认 firewalld/SELinux 未阻断 Pod 网段通信(生产环境不建议直接关闭,应按需放行)。
以上要点与排查命令覆盖了标签匹配、策略方向、CNI 能力与主机侧网络等关键环节。
- 查看策略与生效范围:
以上就是关于“centos k8s网络策略应用”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm