举例:Network Policies
本文描述了如何在 Kubernetes 集群中通过创建 NetworkPolicy 的方式来声明网络策略,以管理 Pod 之间的网络通信流量。
前提条件
您已经安装了 Kubernetes 集群,如果没有,请参考文档 安装Kubernetes单Master节点
您可以使用 kubectl 访问您的集群,请参考文档 安装Kubectl
请确保您使用的网络插件支持 Network Policy,如下的网络插件都是可以的:
如果您按照 安装Kubernetes单Master节点 安装的集群,默认是 calico 网络插件
排序
按字母顺序排序,不代表推荐顺序。本文中的例子对上述所有网络插件都有效
创建一个Deployment并配置Service
- 创建一个
nginx
Deployment 用于演示 Kubernetes 的 NetworkPolicy:
kubectl create deployment nginx --image=nginx
输出结果
deployment.apps/nginx created
通过Service暴露该Deployment
kubectl expose deployment nginx --port=80
输出结果
service/nginx exposed
查询结果
kubectl get svc,pod
输出结果
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes 10.100.0.1 <none> 443/TCP 46m
service/nginx 10.100.0.16 <none> 80/TCP 33s
NAME READY STATUS RESTARTS AGE
pod/nginx-701339712-e0qfq 1/1 Running 0 35s
从另外一个pod访问Service
默认是可以从另外一个Pod访问 nginx
Service 的。下面的方法可以执行此测试:
在 default
名称空间中创建 busybox 容器,并执行 wget
命令:
kubectl run --generator=run-pod/v1 busybox --rm -ti --image=busybox -- /bin/sh
请按照下面的例子,在命令行中执行 wget --spider --timeout=1 nginx
Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false
Hit enter for command prompt
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
remote file exists
/ #
限制对nginx的访问
下面的 NetworkPolicy
可以声明:只有带 access=true
标签的 Pod 可以访问 nginx
服务:
network-policy.yaml文件内容
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
app: nginx
ingress:
- from:
- podSelector:
matchLabels:
access: "true"
执行命令以创建该 NetworkPolicy:
kubectl apply -f network-policy.yaml
输出结果如下:
networkpolicy.networking.k8s.io/access-nginx created
从不带标签的Pod访问nginx服务
如果从不带标签的 Pod 访问该 nginx 服务,请求将超时:
kubectl run --generator=run-pod/v1 busybox --rm -ti --image=busybox -- /bin/sh
请按照下面的例子在命令行中执行 wget --spider --timeout=1 nginx
Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false
Hit enter for command prompt
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
wget: download timed out
/ #
从带有标签的Pod访问nginx服务
从带有 access=true
标签的 Pod 中访问 nginx 服务,将能够执行成功:
kubectl run --generator=run-pod/v1 busybox --rm -ti --labels="access=true" --image=busybox -- /bin/sh
请按照下面的例子在命令行中执行 wget --spider --timeout=1 nginx
Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false
Hit enter for command prompt
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
remote file exists
/ #
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!