久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何解析k8s集群Canal的網(wǎng)絡控制

157次閱讀
沒有評論

共計 5985 個字符,預計需要花費 15 分鐘才能閱讀完成。

如何解析 k8s 集群 Canal 的網(wǎng)絡控制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1 簡介

Canal 是 calico 和 flannel 的結合,我們因為 Calico 不僅能夠提供很好的網(wǎng)絡性能,還能有網(wǎng)絡規(guī)則控制,但是我們很多時候使用的 Flannel 網(wǎng)絡,他的缺點就是沒有網(wǎng)絡控制只能提供網(wǎng)絡服務,所以 Canal 誕生了,為 Falanel 提供了網(wǎng)絡控制。

網(wǎng)絡策略 控制出站:egress 控制進站:ingress 可以以 ip 地址塊定義規(guī)則,也可以基于命名空間規(guī)則定義,還可以對 pod 定義規(guī)則

2 部署 Canal

curl \
https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/canal/canal.yaml \
kubectl apply -f canal.yaml
1)canal 默認控制的是 10.244.0.0/16 ,如果你在安裝 k8s 集群是設置的 pod 網(wǎng)絡不是此段網(wǎng)絡,則你需要修改配置文件
2)我們采用的和 k8s 集群公用 etcd 的方式創(chuàng)建
查看創(chuàng)建的 pod
# kubectl get pods -n kube-system 
NAME READY STATUS RESTARTS AGE
canal-9lmw8 2/2 Running 0 4m50s
canal-ln6kg 2/2 Running 0 4m50s
canal-mx6tn 2/2 Running 0 4m50s
coredns-fb8b8dccf-lfbkh 1/1 Running 2 10d
coredns-fb8b8dccf-t2kdz 1/1 Running 2 10d
etcd-master-1 1/1 Running 2 10d
kube-apiserver-master-1 1/1 Running 2 10d
kube-controller-manager-master-1 1/1 Running 2 10d
kube-flannel-ds-amd64-df7gk 1/1 Running 3 9d
kube-flannel-ds-amd64-dzxfd 1/1 Running 3 9d
kube-flannel-ds-amd64-mgw2m 1/1 Running 2 9d
kube-proxy-47d6q 1/1 Running 2 10d
kube-proxy-jztrs 1/1 Running 3 10d
kube-proxy-rt4xx 1/1 Running 3 10d
kube-scheduler-master-1 1/1 Running 2 10d
kubernetes-dashboard-5f7b999d65-8h79h 1/1 Running 0 21h

3 創(chuàng)建兩個實驗的空間

kubectl create namespace shengchan
kubectl create namespace test

4 創(chuàng)建網(wǎng)絡規(guī)則測試

 默認 ingress  和  engress 可以一起使用,當這兩規(guī)則同時存在那么將使用 policyTypes 做具體的規(guī)則指向
例如:創(chuàng)建一個 policy 默認拒絕所有在空間 shengchan 的入站規(guī)則

創(chuàng)建一組屬于 test 空間的 pod kubectl apply -f pod-networkpolicy1.yaml -n test 分別查看兩組 pod 的 IP 地址 # kubectl get pods -o wide -n shengchan NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-test 1/1 Running 0 16s 10.244.1.2 node2  none   none [root@master-1 ~]# kubectl get pods -o wide -n test NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-test 1/1 Running 0 9s 10.244.2.2 node1  none   none
# ping 10.244.1.2 -c 1 PING 10.244.1.2 (10.244.1.2) 56(84) bytes of data. --- 10.244.1.2 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms # ping 10.244.2.2 -c 1 PING 10.244.2.2 (10.244.2.2) 56(84) bytes of data. 64 bytes from 10.244.2.2: icmp_seq=1 ttl=63 time=0.660 ms --- 10.244.2.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.660/0.660/0.660/0.000 ms 此時發(fā)現(xiàn)屬于 shengchan 空間的 pod 是被拒絕訪問的,屬于 test 空間的 pod 正常訪問 此時我們是基于名稱空間級別的入站網(wǎng)絡訪問策略

5 將上面的默認拒絕策略放行

 修改配置文件
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: deny-all-ingress
 namespace: shengchan
spec: 
 podSelector: {}
 ingress:
 - {}
 policyTypes:
 - Ingress
kubectl apply -f ingress-deny.yaml

再次測試 10.244.1.2

[root@master-1 ~]# curl -I 10.244.1.2
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 27 Apr 2019 16:58:04 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 31 Jan 2017 15:01:11 GMT
Connection: keep-alive
ETag:  5890a6b7-264 
Accept-Ranges: bytes
[root@master-1 ~]# curl -I 10.244.2.2
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 27 Apr 2019 16:58:07 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 31 Jan 2017 15:01:11 GMT
Connection: keep-alive
ETag:  5890a6b7-264 
Accept-Ranges: bytes
說明我們的網(wǎng)絡策略放行成功 

6 放行特定的入站

以標簽的形式進行劃分 pod 入站規(guī)則是否被放行

1)回復默認拒絕所有
[root@master-1 ~]# cat ingress-deny.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: deny-all-ingress
 namespace: shengchan
spec: 
 podSelector: {}
 policyTypes:
 - Ingress
kubectl apply -f ingress-deny.yaml
2) 給 shengchan pod 打一個標簽
kubectl label pods pod-test app=hello -n shengchan
3)創(chuàng)建一個新的規(guī)則
# vim ingress-allow.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: allow-hello-ingress
 namespace: shengchan
spec:
 podSelector:
 matchLabels:
 app: hello
 ingress:
 - from:
 - ipBlock:
 cidr: 10.244.0.0/16
 except:
 - 10.244.2.2/32
 ports:
 - protocol: TCP
 port: 80

解釋:  我們重新定義了一個 policy,通過標簽匹配到我們已有的 pod(我們一已有的 pod 是拒絕所有訪問的),定義 ingres 規(guī)則,如果不通過 from 方式定義默認是所有網(wǎng)段都可以訪問到擁有這個標簽的 pod 為了測試我們使用 from 方式去拒絕 10.244.0.0 但是會放行 10.244.2.2 因為我們有這個 ip 的 pod 創(chuàng)建萬郴更可以進行測試 ports 就是指定特定開放的端口 4)創(chuàng)建之前進行訪問測試 # kubectl get pods -n shengchan -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-test 1/1 Running 0 62m 10.244.1.2 node2  none   none # curl 10.244.1.2 說明無法訪問 5)創(chuàng)建之后測試 kubectl apply -f ingress-allow.yml  [root@master-1 ~]# curl -I 10.244.1.2 HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Sat, 27 Apr 2019 17:32:15 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 31 Jan 2017 15:01:11 GMT Connection: keep-alive ETag:  5890a6b7-264 Accept-Ranges: bytes 說明已經(jīng)放行 至于對于 10.244.0.0 網(wǎng)段的限制有興趣可以測試一下

6 egress 出站規(guī)則

1)設置一個拒絕所有出站 policy
cat egress.yml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: deny-all-egress
 namespace: test
spec: 
 podSelector: {}
 policyTypes:
 - Egress
kubectl apply -f egress.yml
2)創(chuàng)建一個 test 命名空間下的 pods
kubectl apply -f pod-networkpolicy1.yaml -n test
3) 查看 podIP 并進去容器去測試 ping 一個正常的 podip
[root@master-1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
net-test-5764c456cb-2c9df 1/1 Running 24 24h 10.244.2.22 node1  none   none 
net-test-5764c456cb-ng6vh 1/1 Running 46 6d5h 10.244.1.21 node2  none   none 
[root@master-1 ~]# kubectl get pods -o wide -n test
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-test 1/1 Running 0 86m 10.244.2.2 node1  none   none 
kubectl exec -it pod-test -n test -- /bin/bash
root@pod-test:/# ping 10.244.1.21
PING 10.244.1.21 (10.244.1.21): 56 data bytes
^C--- 10.244.1.21 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
說明此時已經(jīng)應用策略
4)修改配置文件放行所有出站
# cat egress.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: deny-all-egress
 namespace: test
spec: 
 podSelector: {}
 egress:
 - {}
 policyTypes:
 - Egress
kubectl apply -f egress.yml 
root@pod-test:/# ping 10.244.1.21 -c 1
PING 10.244.1.21 (10.244.1.21): 56 data bytes
64 bytes from 10.244.1.21: icmp_seq=0 ttl=62 time=0.939 ms
--- 10.244.1.21 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.939/0.939/0.939/0.000 ms
此時說明已經(jīng)放行成功 

7 更加復雜的 policy 規(guī)則需要根據(jù)不同的環(huán)境規(guī)劃進行深入探究,其所有都規(guī)則都體現(xiàn)在配置文件中

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業(yè)資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計5985字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乌兰察布市| 家居| 上犹县| 济南市| 松桃| 海丰县| 栾川县| 兴化市| 石狮市| 克拉玛依市| 莲花县| 屏东县| 蒙山县| 北川| 白水县| 德惠市| 资中县| 泸定县| 陈巴尔虎旗| 大厂| 天气| 治多县| 喀喇沁旗| 高清| 蛟河市| 苗栗市| 外汇| 廊坊市| 灌云县| 吉林省| 大同市| 新源县| 江华| 大冶市| 灵璧县| 香港| 长岛县| 太仆寺旗| 克山县| 德昌县| 张家港市|