k8s網絡策略
- k8s網絡測試概述
- 查看防火墻策略
- k8s網絡策略網絡訪問控制案例:
- 配置k8s網絡策略
- 結果驗證
- k8s網絡策略配置示例
k8s網絡測試概述
網絡策略就是設置防火墻
查看防火墻策略
# 獲取當前命名空間下的所有 NetworkPolicy 資源(網絡策略)
# NetworkPolicy 用于控制 Pod 之間的網絡通信規則
kubectl get networkpolicies# 獲取當前命名空間下的所有 NetworkPolicy 資源(簡寫命令)
# netpol 是 networkpolicies 的縮寫,效果與全稱命令等價
kubectl get netpol
k8s網絡策略網絡訪問控制案例:
- 需求:
只允許dev命名空間
中的Pod
訪問test命名空間
中pod
的80端口
.
- 分析:
一個只有spec
的network policy
,其他條件
為空
,意味著進出流全部禁止
.
只允許指定命名空間
中的應用
訪問.
配置k8s網絡策略
# 編輯k8s網絡策略配置文件
vim k8s-networkpolicy.yaml
在 test 命名空間
中創建以下 NetworkPolicy
:
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' 命名空間下的所有 PodpolicyTypes:- Ingress # 僅應用于入站流量策略ingress:- from:- namespaceSelector: # 定義流量來源為特定命名空間matchLabels:name: dev # 匹配標簽為 'name=dev' 的命名空間ports:- protocol: TCP # 允許的協議類型為 TCPport: 80 # 允許訪問的端口號為 80
保存
# 應用網絡策略
kubectl apply -f k8s-networkpolicy.yaml
結果驗證
# 命名空間打標簽
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
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:# 網絡策略名稱name: allow-port-from-namespacenamespace: corp-net
spec:# 根據標簽篩選pod,{}表示所有podSelector: {}policyTypes:# 流方向- Ingress# Ingress(入pod流量)+from(從哪來)ingress:- from:# 從哪個ns來- namespaceSelector:# 匹配的labelmatchLabels:name: big-corpports:# 允許的協議- protocol: TCP# 允許的端口port: 9200