前言
Kubernetes提供了namesapce,用來做多租戶隔離乌逐,但是如果不配置網(wǎng)絡(luò)策略扔罪,namespace的隔離也僅僅是作用于在kubernetes編排調(diào)度時的隔離,實際上不同namespace下的pod還是可以相互串通的州刽。此時就需要使用Kubernetes提供的networkPolicy,用于隔離不同租戶的應(yīng)用并減少攻擊面。networkpolicy通過標(biāo)簽選擇器來模擬傳統(tǒng)的網(wǎng)絡(luò)物理隔離浪箭,并通過不同的策略完成訪問方向的管控穗椅。
環(huán)境
- Kubernetes 1.10.2
- Calico 3.1.0
步驟
calico 預(yù)先已部署完畢,參考官網(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)訪問可成功