网络策略简介
在默认情况下,Kubernetes 集群网络没有任何限制,所有 Pod 可以相互通信。在某些场景下,需要进行网络控制以减少攻击面,提高安全性,这时就需要使用网络策略。
网络策略(Network Policy) 是 Kubernetes 资源,用于限制 Pod 的入站和出站流量。网络策略可以基于 Pod 和 Namespace 提供网络访问控制。
网络策略的应用场景:
- 应用程序间的访问控制,例如项目 A 不能访问项目 B 的 Pod。
- 开发环境命名空间不能访问测试环境命名空间的 Pod。
- 当 Pod 暴露到外部时,需要做 Pod 白名单。
- 多租户网络环境隔离。
网络策略示例
一个网络策略示例如下:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
解析:
metadata
: 定义网络策略的名称和命名空间。podSelector
: 目标 Pod,通过标签选择器确定应用策略的 Pod。policyTypes
: 策略类型,指定策略用于入站和出站流量控制。ingress
: 入站流量规则,from
定义允许访问的来源,可以是 IP 段、命名空间或 Pod 标签。ports
定义可以访问的端口。egress
: 出站流量规则,to
定义可以访问的目标 IP 段和端口。
案例1:拒绝命名空间下所有Pod出入站流量
这个策略将禁止所有Pod的入站和出站流量,确保该命名空间内的Pod无法与外部通信。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-traffic
namespace: your-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
案例2:拒绝其他命名空间Pod访问
这个策略将禁止其他命名空间内的Pod访问指定命名空间内的Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-other-namespaces
namespace: your-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: your-namespace
案例3:允许其他命名空间Pod访问指定应用
这个策略允许其他命名空间内的Pod访问指定命名空间内某一应用的Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-specific-app
namespace: your-namespace
spec:
podSelector:
matchLabels:
app: your-app
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: {}
案例4:同一个命名空间下应用之间限制访问
这个策略将限制同一命名空间下不同应用之间的访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-app-communication
namespace: your-namespace
spec:
podSelector:
matchLabels:
app: appA
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: appB
案例5:只允许指定命名空间中的应用访问
这个策略将只允许特定命名空间中的应用访问该命名空间内的Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-specific-namespace
namespace: your-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: specific-namespace
这些策略示例展示了如何使用Kubernetes网络策略来实现不同的访问控制需求。通过合理配置网络策略,可以增强集群的安全性,确保不同命名空间和应用之间的通信符合预期的安全要求。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。