内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
本文档风哥主要介绍Kubernetes集群网络安全策略的配置方法,包括NetworkPolicy、Pod安全策略、网络插件等内容。
Part01-基础概念与理论知识
1.1 K8s网络安全
NetworkPolicy:网络策略控制Pod间通信
Pod Security Policy:Pod安全策略
Service Account:服务账号权限控制
RBAC:基于角色的访问控制
# 网络插件
Calico、Flannel、Weave、Cilium
Part02-生产环境规划与建议
2.1 网络策略设计
1. 默认拒绝所有流量
2. 显式允许必要通信
3. 按命名空间隔离
4. 限制出口流量
Part03-生产环境项目实施方案
3.1 NetworkPolicy配置
$ kubectl create ns production
# 默认拒绝所有入站流量
$ cat > default-deny-ingress.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
EOF
$ kubectl apply -f default-deny-ingress.yaml
# 允许特定Pod访问
$ cat > allow-web.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
namespace: production
spec:
podSelector:
matchLabels:
app: web
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
ports:
- protocol: TCP
port: 80
EOF
$ kubectl apply -f allow-web.yaml
3.2 查看网络策略
$ kubectl get networkpolicy -n production
NAME POD-SELECTOR AGE
default-deny-ingress
allow-web app=web 30s
# 查看策略详情
$ kubectl describe networkpolicy allow-web -n production
Name: allow-web
Namespace: production
Created on: 2026-04-06 10:00:00 +0800 CST
Spec:
PodSelector: app=web
Allowing ingress traffic:
To Port: 80/TCP
From:
NamespaceSelector: name=frontend
Policy Types: Ingress
Part04-生产案例与实战讲解
4.1 案例:多层应用网络隔离
# 1.更多视频教程www.fgedu.net.cn 创建命名空间
$ kubectl create ns web
$ kubectl create ns app
$ kubectl create ns db
# 2. 配置DB网络策略(只允许App访问)
$ cat > db-network-policy.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
namespace: db
spec:
podSelector:
matchLabels:
app: mysql
ingress:
- from:
- namespaceSelector:
matchLabels:
name: app
ports:
- protocol: TCP
port: 3306
EOF
$ kubectl apply -f db-network-policy.yaml
# 3. 配置App网络策略(允许Web访问,允许访问DB)
$ cat > app-network-policy.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-policy
namespace: app
spec:
podSelector:
matchLabels:
app: tomcat
ingress:
- from:
- namespaceSelector:
matchLabels:
name: web
ports:
- protocol: TCP
port: 8080
egress:
- to:
- namespaceSelector:
matchLabels:
name: db
ports:
- protocol: Tfrom PG视频:www.itpux.comCP
port: 3306
EOF
$ kubectl apply -f app-network-policy.yaml
风哥提示:
Part05-风哥经验总结与分享
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
