Ubuntu上Kubernetes网络策略配置
一 前置条件与网络插件
二 策略语言与生效前提
三 常用网络策略模板
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-ns-http
namespace: default
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Ingress
ingress:
- from:
- podSelector: {} # 同命名空间任意 Pod
ports:
- protocol: TCP
port: 80
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ns-and-client
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproj
podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-to-dbnet
namespace: default
spec:
podSelector:
matchLabels:
app: fetcher
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.1.2.0/24
ports:
- protocol: TCP
port: 5432
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-kube-proxy-to-services
namespace: kube-system
spec:
podSelector:
matchLabels:
k8s-app: kube-proxy
policyTypes:
- Egress
egress:
- to:
- namespaceSelector: {}
ports:
- protocol: TCP
port: 443 # 访问 kube-apiserver 的 Service 端口
- protocol: TCP
port: 53 # CoreDNS
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-internal-ingress
namespace: default
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 192.168.26.0/24
except:
- 192.168.26.71/32 # 例如禁止某个管理地址
ports:
- protocol: TCP
port: 80
以上模板可直接按需组合使用;策略是按命名空间生效的,跨命名空间访问需为目标命名空间设置相应 namespaceSelector 或在目标命名空间部署对等策略。
四 验证与排错