NetworkPolicy
NetworkPolicy是Kubernetes设计用来限制Pod访问的对象,相当于从应用的层面构建了一道防火墙,进一步保证了网络安全。
NetworkPolicy支持的能力取决于集群的网络插件的能力,如CCE仅容器隧道网络模式的集群支持设置Pod入方向规则的NetworkPolicy。
默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的Pod的流量都被允许。
NetworkPolicy的规则可以选择如下3种:
- namespaceSelector:根据命名空间的标签选择,具有该标签的命名空间都可以访问。
- podSelector:根据Pod的标签选择,具有该标签的Pod都可以访问。
- ipBlock:根据网络选择,网段内的IP地址都可以访问。(CCE当前不支持此种方式)
使用Ingress规则
- 使用podSelector设置访问范围
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - podSelector: # 只允许具有role=frontend标签的Pod访问 matchLabels: role: frontend ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379
示意图如下所示。
图1 podSelector
- 使用namespaceSelector设置访问范围
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - namespaceSelector: # 只允许具有project=myproject标签的命名空间中的Pod访问 matchLabels: project: myproject ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379
示意图如下所示。
图2 namespaceSelector