k8s网络策略
k8s网络测试概述
网络策略就是设置防火墙
查看防火墙策略
shell
# 获取当前命名空间下的所有 NetworkPolicy 资源(网络策略)
# NetworkPolicy 用于控制 Pod 之间的网络通信规则
kubectl get networkpolicies
# 获取当前命名空间下的所有 NetworkPolicy 资源(简写命令)
# netpol 是 networkpolicies 的缩写,效果与全称命令等价
kubectl get netpol
k8s网络策略网络访问控制案例:
- 需求:
只允许dev命名空间
中的Pod
访问test命名空间
中pod
的80端口
.
- 分析:
一个只有spec
的network policy
,其他条件
为空
,意味着进出流全部禁止
.
只允许指定命名空间
中的应用
访问.
配置k8s网络策略
shell
# 编辑k8s网络策略配置文件
vim k8s-networkpolicy.yaml
在 test 命名空间
中创建以下 NetworkPolicy
:
yaml
apiVersion: networking.k8s.io/v1 # 指定使用的 Kubernetes API 版本
kind: NetworkPolicy # 资源类型为 NetworkPolicy,表示这是一个网络策略对象
metadata:
name: allow-dev-to-test-80 # 设置该网络策略的名称为 'allow-dev-to-test-80'
namespace: test # 指定该网络策略适用于 'test' 命名空间
spec:
podSelector: {} # Pod 选择器为空对象,表示该策略适用于 'test' 命名空间下的所有 Pod
policyTypes:
- Ingress # 仅应用于入站流量策略
ingress:
- from:
- namespaceSelector: # 定义流量来源为特定命名空间
matchLabels:
name: dev # 匹配标签为 'name=dev' 的命名空间
ports:
- protocol: TCP # 允许的协议类型为 TCP
port: 80 # 允许访问的端口号为 80
保存
shell
# 应用网络策略
kubectl apply -f k8s-networkpolicy.yaml
结果验证
shell
# 命名空间打标签
kubectl labdel namespace dev name=dev
# 测试
kubectl run busybox --image=busybox -n dev --sleep 12h
# 可以访问
kubectl exec busybox -n dev --wget ${test命名空间pod的ip}
# 不可以访问
kubectl exec busybox --wget ${test命名空间pod的ip}
k8s网络策略配置示例
protocol
在ports
层级下,只能指定tcp/udp/sctp
yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
# 网络策略名称
name: allow-port-from-namespace
namespace: corp-net
spec:
# 根据标签筛选pod,{}表示所有
podSelector: {}
policyTypes:
# 流方向
- Ingress
# Ingress(入pod流量)+from(从哪来)
ingress:
- from:
# 从哪个ns来
- namespaceSelector:
# 匹配的label
matchLabels:
name: big-corp
ports:
# 允许的协议
- protocol: TCP
# 允许的端口
port: 9200
