kubernete networkpolicy原理
定义:
A network policy is a specification of how groups of pods are allowed to communicate with each other and other network endpoints.
NetworkPolicy resources use labels to select pods and define rules which specify what traffic is allowed to the selected pods.
#cat networkpolicy1.yaml
apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
name: allow-check-ssdb //networkpolicy的名字
namespace: tmi-app //所属的namespace
spec:
egress:
- ports:
- port: 6384
protocol: TCP
to:
- ipBlock:
cidr: 10.15.2.135/32 //放行的IP
podSelector:
matchLabels:
tmi-app: shield-core //对应的label名字,tmi-app:shield-core ,这个名字可以方便用户区分,但是对k8s来说是一组kv
policyTypes:
- Egress
这是一条networkpolicy 例子,背景:
kubernetes里面有个pod需要访问外部ssdb,ssdb部署在外部ecs中。默认情况下,pod是无法访问外部服务,这个就需要设置networkpolicy。
ssdb服务部署在 10.15.2.135:6384,这个时候由于networkpolicy的限制,需要开通对应的网络策略。
下图是pod网络层次图。

常用命令如下:
kubectl apply -f networkpolicy1.yaml //下发networkpolicy策略
kubectl get networkpolicies. -n tmi-app //查看改namespace下的策略
kubectl get networkpolicy allow-check-ssdb -n tmi-app -o yaml //查看yaml文件
kubectl edit networkpolicy allow-check-ssdb -n tmi-app -o yaml //编辑yaml文件(编辑完保存:wq即会生效)
遇到了个小问题:
编辑yaml文件的时候,在指定 matchLabels 字段的时候,当有个多个labels的时候,比如我的需求是指定如下2个label:
tmi-app: shield-core
tmi-app: login-check-core
按照如下方式指定的时候,由于labels的key值一样,会导致【tmi-app: login-check-core】覆盖【tmi-app: shield-core】,只有当key不一样的时候,才可以按照如下方式指定多个labels。
matchLabels:
tmi-app: shield-core
tmi-app: login-check-core
后面只好分2个yaml文件来deploy networkpolicy。 后面研究下,多个lable的key值一样的时候要如何写yaml文件。