最近更新时间:2024-06-27 15:31:49
NetworkPolicy是Kubernetes提供的一种资源,用于定义基于Pod的网络隔离策略。Networkpolicy允许在IP地址或端口层面(第3层或第4层)对特定应用程序的网络流量进行控制。通过设置规则,可以限制Pod之间的通信,确保只有经过授权的Pod可以相互通信,从而增强网络安全性。
Networkpolicy提供3种可以组合使用的规则:
podSelector:选择附加在Pod上的标签,对带有标签Pod的进出流量实现访问控制。
namespaceSelector:选择附加在命名空间上的标签,对命名空间下的Pod进出流量实现访问控制。
ipBlock:选择特定IP地址段,对归属在此IP地址段的Pod进出流量实现访问控制。
在创建集群时,网络模型需要选择Calico
Networkpolicy暂不支持通过界面配置,所有需要获取集群Kubeconfig并通过Kubectl链接集群,编写Yaml并下发至集群内
不支持对IPV6地址网络隔离。
不支持K8s 1.21以下集群使用。
进入目标集群,在组件管理列表种找到Networkpolicy组件。
在组件实例页面点击安装,当组件状态变为运行中代表已经安装成功。
通过Kubectl工具链接集群,下发Networkpolicy配置。
默认情况下,如果命名空间中不存在任何策略,则所有进出该名字空间中 Pod 的流量都被允许。
在命名空间(default)中的所有Pod上启用默认的拒绝策略,阻止任何Ingress(入站)流量进入这些Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
在命名空间(default)中的所有Pod允许所有的Ingress(入站)流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-ingress
namespace: default
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
在命名空间(default)中的所有Pod上启用默认的拒绝策略,限制任何出站流量,阻止这些Pod发起对外部的网络访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress
在命名空间(default)中的所有Pod上启用允许所有的Egress流量的策略,允许这些Pod发起对任何目的地的出站网络访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
namespace: default
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
在命名空间(default)中的具有标签role: db的Pod上启用策略,允许来自具有标签role: frontend的Pod的TCP流量进入这些Pod的6379端口。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
在命名空间(default)中具有标签role: db的Pod上启用策略,允许来自具有标签project: myproject的命名空间的TCP流量进入这些Pod的6379端口。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
ports:
- protocol: TCP
port: 6379
在命名空间(default)中具有标签role: db的Pod上启用策略,允许来自CIDR范围为172.17.0.0/16的IP地址的TCP流量进入这些Pod的6379端口,但排除了CIDR范围为172.17.1.0/24的IP地址。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
ports:
- protocol: TCP
port: 6379
纯净模式