前言
Kubernetes提供了namesapce,用來做多租戶隔離,但是如果不配置網(wǎng)絡(luò)策略,namespace的隔離也僅僅是作用于在kubernetes編排調(diào)度時的隔離,實際上不同namespace下的pod還是可以相互串通的。此時就需要使用Kubernetes提供的networkPolicy,用于隔離不同租戶的應用并減少攻擊面。networkpolicy通過標簽選擇器來模擬傳統(tǒng)的網(wǎng)絡(luò)物理隔離,并通過不同的策略完成訪問方向的管控。
環(huán)境
- Kubernetes 1.10.2
- Calico 3.1.0
步驟
calico 預先已部署完畢,參考官網(wǎng)即可,沒有特殊配置
(下述代碼中類似的均只寫一份)
-
創(chuàng)建兩個namespace: test1-ns test2-ns
test1-ns.yml
apiVersion:v1
kind: Namespace
metadata:
name: test1-ns
labels:
project: test1-ns
-
分別在兩個namespace下創(chuàng)建pod: test1.yml test2.yml
test1.yml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: test1 namespace: test1-ns spec: replicas: 1 selector: matchLabels: app: test1 template: metadata: name: test1 labels: app: test1 project: test1-ns spec: containers: - name: test1 image: hub.xxxxxxxx.com.cn/private/caiyt/hello:1.0.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: test1 namespace: test1-ns spec: selector: app: test1 type: NodePort ports: - name: test1-http port: 8080 targetPort: 8080 nodePort: 30451
-
測試互訪
互訪測試目前可以看到,test1和test2是可以互相連通的
-
創(chuàng)建networkPolicy.yml
apiVersion: networking.k8s.io/v1 metadata: name: test namespace: test1-ns spec: podSelector: matchLabels: project: test1-ns ingress: - from: - namespaceSelector: matchLabels: project: test1-ns -
測試聯(lián)通性
添加策略后的互訪
因為針對test1的namespace做了策略限制,可見到由其他的命名空間中的pod無法訪問test1-ns中的pod,但是反向即可。
-
外網(wǎng)訪問測試
- ipBlock: cidr: 10.20.1.0/24添加calico所創(chuàng)建tunl0@NONE網(wǎng)段訪問策略后,外網(wǎng)訪問可成功
外網(wǎng)訪問


