国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

k8s-kubernetes--網(wǎng)絡(luò)策略、flannel網(wǎng)絡(luò)插件和calico網(wǎng)絡(luò)插件

這篇具有很好參考價值的文章主要介紹了k8s-kubernetes--網(wǎng)絡(luò)策略、flannel網(wǎng)絡(luò)插件和calico網(wǎng)絡(luò)插件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


一、k8s網(wǎng)絡(luò)通信

抽象的接口層,將容器網(wǎng)絡(luò)配置方案與容器平臺方案解耦
CNI(Container Network Interface)就是這樣的一個接口層,它定義了一套接口標(biāo)準(zhǔn),提供了規(guī)范文檔以及一些標(biāo)準(zhǔn)實(shí)現(xiàn)。采用CNI規(guī)范來設(shè)置容器網(wǎng)絡(luò)的容器平臺不需要關(guān)注網(wǎng)絡(luò)的設(shè)置的細(xì)節(jié),只需要按CNI規(guī)范來調(diào)用CNI接口即可實(shí)現(xiàn)網(wǎng)絡(luò)的設(shè)置

k8s通過CNI接口接入其他插件來實(shí)現(xiàn)網(wǎng)絡(luò)通訊。目前比較流行的插件有flannel,calico等。
  CNI插件存放位置:# cat  /etc/cni/net.d/10-flannel.conflist 
  
  插件使用的解決方案如下:
	虛擬網(wǎng)橋,虛擬網(wǎng)卡,多個容器共用一個虛擬網(wǎng)卡進(jìn)行通信。
	多路復(fù)用:MacVLAN,多個容器共用一個物理網(wǎng)卡進(jìn)行通信。
	硬件交換:SR-LOV,一個物理網(wǎng)卡可以虛擬出多個接口,這個性能最好。
	
  容器間通信:同一個pod內(nèi)的多個容器間的通信,通過lo即可實(shí)現(xiàn);
	
  pod之間的通信:
	同一節(jié)點(diǎn)的pod之間通過cni網(wǎng)橋轉(zhuǎn)發(fā)數(shù)據(jù)包。(brctl show可以查看)
	不同節(jié)點(diǎn)的pod之間的通信需要網(wǎng)絡(luò)插件支持。
	
  pod和service通信: 通過iptables或ipvs實(shí)現(xiàn)通信,ipvs取代不了iptables,因為ipvs只能做負(fù)載均衡,而做不了nat轉(zhuǎn)換。
	
  pod和外網(wǎng)通信:iptables的MASQUERADE。
	
  Service與集群外部客戶端的通信;(ingress、nodeport、loadbalancer)

1.網(wǎng)絡(luò)策略

網(wǎng)絡(luò)策略官網(wǎng):https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

前置條件
網(wǎng)絡(luò)策略通過網(wǎng)絡(luò)插件來實(shí)現(xiàn)。要使用網(wǎng)絡(luò)策略,你必須使用支持 NetworkPolicy 的網(wǎng)絡(luò)解決方案。 創(chuàng)建一個 NetworkPolicy 資源對象而沒有控制器來使它生效的話,是沒有任何作用的。(Flannel不支持 NetworkPolicy,所以使用Flannei網(wǎng)絡(luò)插件是不會隔離pod的)
隔離和非隔離的 Pod
默認(rèn)情況下,Pod 是非隔離的,它們接受任何來源的流量。
Pod 在被某 NetworkPolicy 選中時進(jìn)入被隔離狀態(tài)。 一旦名字空間中有 NetworkPolicy 選擇了特定的 Pod,該 Pod 會拒絕該 NetworkPolicy 所不允許的連接。 (名字空間下其他未被 NetworkPolicy 所選擇的 Pod 會繼續(xù)接受所有的流量)
網(wǎng)絡(luò)策略不會沖突,它們是累積的。 如果任何一個或多個策略選擇了一個 Pod, 則該 Pod 受限于這些策略的 入站(Ingress)/出站(Egress)規(guī)則的并集。因此評估的順序并不會影響策略的結(jié)果。
為了允許兩個 Pods 之間的網(wǎng)絡(luò)數(shù)據(jù)流,源端 Pod 上的出站(Egress)規(guī)則和 目標(biāo)端 Pod 上的入站(Ingress)規(guī)則都需要允許該流量。 如果源端的出站(Egress)規(guī)則或目標(biāo)端的入站(Ingress)規(guī)則拒絕該流量, 則流量將被拒絕。

2.service和iptables的關(guān)系

service 的代理是 kube-proxy
kube-proxy 運(yùn)行在所有節(jié)點(diǎn)上,它監(jiān)聽 apiserver 中 service 和 endpoint 的變化情況,創(chuàng)建路由規(guī)則以提供服務(wù) IP 和負(fù)載均衡功能。簡單理解此進(jìn)程是Service的透明代理兼負(fù)載均衡器,其核心功能是將到某個Service的訪問請求轉(zhuǎn)發(fā)到后端的多個Pod實(shí)例上,而kube-proxy底層又是通過iptables和ipvs實(shí)現(xiàn)的。
iptables原理
Kubernetes從1.2版本開始,將iptables作為kube-proxy的默認(rèn)模式。iptables模式下的kube-proxy不再起到Proxy的作用,其核心功能:通過API Server的Watch接口實(shí)時跟蹤Service與Endpoint的變更信息,并更新對應(yīng)的iptables規(guī)則,Client的請求流量則通過iptables的NAT機(jī)制“直接路由”到目標(biāo)Pod。
ipvs原理
IPVS在Kubernetes1.11中升級為GA穩(wěn)定版。IPVS則專門用于高性能負(fù)載均衡,并使用更高效的數(shù)據(jù)結(jié)構(gòu)(Hash表),允許幾乎無限的規(guī)模擴(kuò)張,因此被kube-proxy采納為最新模式。

在IPVS模式下,使用iptables的擴(kuò)展ipset,而不是直接調(diào)用iptables來生成規(guī)則鏈。iptables規(guī)則鏈?zhǔn)且粋€線性的數(shù)據(jù)結(jié)構(gòu),ipset則引入了帶索引的數(shù)據(jù)結(jié)構(gòu),因此當(dāng)規(guī)則很多時,也可以很高效地查找和匹配。

可以將ipset簡單理解為一個IP(段)的集合,這個集合的內(nèi)容可以是IP地址、IP網(wǎng)段、端口等,iptables可以直接添加規(guī)則對這個“可變的集合”進(jìn)行操作,這樣做的好處在于可以大大減少iptables規(guī)則的數(shù)量,從而減少性能損耗。
kube-proxy ipvs和iptables的異同
iptables與IPVS都是基于Netfilter實(shí)現(xiàn)的,但因為定位不同,二者有著本質(zhì)的差別:iptables是為防火墻而設(shè)計的;IPVS則專門用于高性能負(fù)載均衡,并使用更高效的數(shù)據(jù)結(jié)構(gòu)(Hash表),允許幾乎無限的規(guī)模擴(kuò)張。

與iptables相比,IPVS擁有以下明顯優(yōu)勢:

  • 為大型集群提供了更好的可擴(kuò)展性和性能;
  • 支持比iptables更復(fù)雜的復(fù)制均衡算法(最小負(fù)載、最少連接、加權(quán)等);
  • 支持服務(wù)器健康檢查和連接重試等功能;
  • 可以動態(tài)修改ipset的集合,即使iptables的規(guī)則正在使用這個集合。
    k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

二、pod間通信

1.同節(jié)點(diǎn)之間的通信

同一節(jié)點(diǎn)的pod之間通過cni網(wǎng)橋轉(zhuǎn)發(fā)數(shù)據(jù)包。(brctl show可以查看)

2.不同節(jié)點(diǎn)的pod之間的通信需要網(wǎng)絡(luò)插件支持(詳解)

(1)Flannel vxlan模式跨主機(jī)通信原理

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

flannel網(wǎng)絡(luò)

  • VXLAN,即Virtual Extensible LAN(虛擬可擴(kuò)展局域網(wǎng)),是Linux本身支持的一網(wǎng)種網(wǎng)絡(luò)虛擬化技術(shù)。VXLAN可以完全在內(nèi)核態(tài)實(shí)現(xiàn)封裝和解封裝工作,從而通過“隧道”機(jī)制,構(gòu)建出覆蓋網(wǎng)絡(luò)(Overlay Network)。
  • VTEP:VXLAN Tunnel End Point(虛擬隧道端點(diǎn)),在Flannel中 VNI的默認(rèn)值是1,這也是為什么宿主機(jī)的VTEP設(shè)備都叫flannel.1的原因。
  • Cni0: 網(wǎng)橋設(shè)備,每創(chuàng)建一個pod都會創(chuàng)建一對 veth pair。其中一端是pod中的eth0,另一端是Cni0網(wǎng)橋中的端口(網(wǎng)卡)。
  • Flannel.1: TUN設(shè)備(虛擬網(wǎng)卡),用來進(jìn)行 vxlan 報文的處理(封包和解包)。不同node之間的pod數(shù)據(jù)流量都從overlay設(shè)備以隧道的形式發(fā)送到對端。
  • Flanneld:flannel在每個主機(jī)中運(yùn)行flanneld作為agent,它會為所在主機(jī)從集群的網(wǎng)絡(luò)地址空間中,獲取一個小的網(wǎng)段subnet,本主機(jī)內(nèi)所有容器的IP地址都將從中分配。同時Flanneld監(jiān)聽K8s集群數(shù)據(jù)庫,為flannel.1設(shè)備提供封裝數(shù)據(jù)時必要的mac、ip等網(wǎng)絡(luò)數(shù)據(jù)信息。

flannel網(wǎng)絡(luò)原理

  • 當(dāng)容器發(fā)送IP包,通過veth pair 發(fā)往cni網(wǎng)橋,再路由到本機(jī)的flannel.1設(shè)備進(jìn)行處理。
  • VTEP設(shè)備之間通過二層數(shù)據(jù)幀進(jìn)行通信,源VTEP設(shè)備收到原始IP包后,在上面加上一個目的MAC地址,封裝成一個內(nèi)部數(shù)據(jù)幀,發(fā)送給目的VTEP設(shè)備。
  • 內(nèi)部數(shù)據(jù)楨,并不能在宿主機(jī)的二層網(wǎng)絡(luò)傳輸,Linux內(nèi)核還需要把它進(jìn)一步封裝成為宿主機(jī)的一個普通的數(shù)據(jù)幀,承載著內(nèi)部數(shù)據(jù)幀通過宿主機(jī)的eth0進(jìn)行傳輸。
  • Linux會在內(nèi)部數(shù)據(jù)幀前面,加上一個VXLAN頭,VXLAN頭里有一個重要的標(biāo)志叫VNI,它是VTEP識別某個數(shù)據(jù)楨是不是應(yīng)該歸自己處理的重要標(biāo)識。
  • flannel.1設(shè)備只知道另一端flannel.1設(shè)備的MAC地址,卻不知道對應(yīng)的宿主機(jī)地址是什么。在linux內(nèi)核里面,網(wǎng)絡(luò)設(shè)備進(jìn)行轉(zhuǎn)發(fā)的依據(jù),來自FDB的轉(zhuǎn)發(fā)數(shù)據(jù)庫,這個flannel.1網(wǎng)橋?qū)?yīng)的FDB信息,是由flanneld進(jìn)程維護(hù)的。
  • linux內(nèi)核在IP包前面再加上二層數(shù)據(jù)幀頭,把目標(biāo)節(jié)點(diǎn)的MAC地址填進(jìn)去,MAC地址從宿主機(jī)的ARP表獲取。
  • 此時flannel.1設(shè)備就可以把這個數(shù)據(jù)幀從eth0發(fā)出去,再經(jīng)過宿主機(jī)網(wǎng)絡(luò)來到目標(biāo)節(jié)點(diǎn)的eth0設(shè)備。目標(biāo)主機(jī)內(nèi)核網(wǎng)絡(luò)棧會發(fā)現(xiàn)這個數(shù)據(jù)幀有VXLAN Header,并且VNI為1,Linux內(nèi)核會對它進(jìn)行拆包,拿到內(nèi)部數(shù)據(jù)幀,根據(jù)VNI的值,交給本機(jī)flannel.1設(shè)備處理,flannel.1拆包,根據(jù)路由表發(fā)往cni網(wǎng)橋,最后到達(dá)目標(biāo)容器。

flannel支持多種后端:

    1. Vxlan
      vxlan //報文封裝,默認(rèn)
      Directrouting //直接路由,跨網(wǎng)段使用vxlan,同網(wǎng)段使用host-gw模式。
    1. host-gw: //主機(jī)網(wǎng)關(guān),性能好,但只能在二層網(wǎng)絡(luò)中,不支持跨網(wǎng)絡(luò),如果有成千上萬的Pod,容易產(chǎn)生廣播風(fēng)暴,不推薦
    1. UDP: //性能差,不推薦
- flannel網(wǎng)絡(luò)	
	VXLAN,即Virtual Extensible LAN(虛擬可擴(kuò)展局域網(wǎng)),是Linux本身支持的一網(wǎng)種網(wǎng)絡(luò)虛擬化技術(shù)。VXLAN可以完全在內(nèi)核態(tài)實(shí)現(xiàn)封裝和解封裝工作,從而通過“隧道”機(jī)制,構(gòu)建出覆蓋網(wǎng)絡(luò)(Overlay Network)。
	VTEP:VXLAN Tunnel End Point(虛擬隧道端點(diǎn)),在Flannel中 VNI的默認(rèn)值是1,這也是為什么宿主機(jī)的VTEP設(shè)備都叫flannel.1的原因。
	Cni0: 網(wǎng)橋設(shè)備,每創(chuàng)建一個pod都會創(chuàng)建一對 veth pair。其中一端是pod中的eth0,另一端是Cni0網(wǎng)橋中的端口(網(wǎng)卡)。
	Flannel.1: TUN設(shè)備(虛擬網(wǎng)卡),用來進(jìn)行 vxlan 報文的處理(封包和解包)。不同node之間的pod數(shù)據(jù)流量都從overlay設(shè)備以隧道的形式發(fā)送到對端。
	Flanneld:flannel在每個主機(jī)中運(yùn)行flanneld作為agent,它會為所在主機(jī)從集群的網(wǎng)絡(luò)地址空間中,獲取一個小的網(wǎng)段subnet,本主機(jī)內(nèi)所有容器的IP地址都將從中分配。同時Flanneld監(jiān)聽K8s集群數(shù)據(jù)庫,為flannel.1設(shè)備提供封裝數(shù)據(jù)時必要的mac、ip等網(wǎng)絡(luò)數(shù)據(jù)信息。
 
- flannel網(wǎng)絡(luò)原理
	當(dāng)容器發(fā)送IP包,通過veth pair 發(fā)往cni網(wǎng)橋,再路由到本機(jī)的flannel.1設(shè)備進(jìn)行處理。
	VTEP設(shè)備之間通過二層數(shù)據(jù)幀進(jìn)行通信,源VTEP設(shè)備收到原始IP包后,在上面加上一個目的MAC地址,封裝成一個內(nèi)部數(shù)據(jù)幀,發(fā)送給目的VTEP設(shè)備。
	內(nèi)部數(shù)據(jù)楨,并不能在宿主機(jī)的二層網(wǎng)絡(luò)傳輸,Linux內(nèi)核還需要把它進(jìn)一步封裝成為宿主機(jī)的一個普通的數(shù)據(jù)幀,承載著內(nèi)部數(shù)據(jù)幀通過宿主機(jī)的eth0進(jìn)行傳輸。
	Linux會在內(nèi)部數(shù)據(jù)幀前面,加上一個VXLAN頭,VXLAN頭里有一個重要的標(biāo)志叫VNI,它是VTEP識別某個數(shù)據(jù)楨是不是應(yīng)該歸自己處理的重要標(biāo)識。
	flannel.1設(shè)備只知道另一端flannel.1設(shè)備的MAC地址,卻不知道對應(yīng)的宿主機(jī)地址是什么。在linux內(nèi)核里面,網(wǎng)絡(luò)設(shè)備進(jìn)行轉(zhuǎn)發(fā)的依據(jù),來自FDB的轉(zhuǎn)發(fā)數(shù)據(jù)庫,這個flannel.1網(wǎng)橋?qū)?yīng)的FDB信息,是由flanneld進(jìn)程維護(hù)的。
	linux內(nèi)核在IP包前面再加上二層數(shù)據(jù)幀頭,把目標(biāo)節(jié)點(diǎn)的MAC地址填進(jìn)去,MAC地址從宿主機(jī)的ARP表獲取。
	此時flannel.1設(shè)備就可以把這個數(shù)據(jù)幀從eth0發(fā)出去,再經(jīng)過宿主機(jī)網(wǎng)絡(luò)來到目標(biāo)節(jié)點(diǎn)的eth0設(shè)備。目標(biāo)主機(jī)內(nèi)核網(wǎng)絡(luò)棧會發(fā)現(xiàn)這個數(shù)據(jù)幀有VXLAN Header,并且VNI為1,Linux內(nèi)核會對它進(jìn)行拆包,拿到內(nèi)部數(shù)據(jù)幀,根據(jù)VNI的值,交給本機(jī)flannel.1設(shè)備處理,flannel.1拆包,根據(jù)路由表發(fā)往cni網(wǎng)橋,最后到達(dá)目標(biāo)容器。
 
 
- flannel支持多種后端:
		1. Vxlan
			vxlan			//報文封裝,默認(rèn)
			Directrouting		//直接路由,跨網(wǎng)段使用vxlan,同網(wǎng)段使用host-gw模式。
		2. host-gw:		//主機(jī)網(wǎng)關(guān),性能好,但只能在二層網(wǎng)絡(luò)中,不支持跨網(wǎng)絡(luò),如果有成千上萬的Pod,容易產(chǎn)生廣播風(fēng)暴,不推薦
		3. UDP:			//性能差,不推薦

(2)vxlan模式(默認(rèn)模式)

[root@server2 ~]# vim damo.yml 
[root@server2 ~]# cat damo.yml 
---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  #clusterIP: None
  #type: NodePort
  #type: LoadBalancer
  externalIPs:
    - 172.25.13.100
 
---
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2
 
[root@server2 ~]# kubectl apply -f damo.yml 
[root@server2 ~]# kubectl  get pod -o wide   ##查看詳細(xì)信息
##下面的命令每一個節(jié)點(diǎn)都可以用
[root@server2 ~]# cat /run/flannel/subnet.env 
[root@server2 ~]# ip n      ##獲取對應(yīng)mac地址
[root@server2 ~]# ip addr   ##查看flannel.1對應(yīng)的mac地址
[root@server4 ~]# bridge fdb
 
 
[root@server2 ~]# kubectl attach demo -it 
	/ # ping 10.244.2.44
 
[root@server3 ~]# tcpdump -i eth0 -nn host 172.25.70.4

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

(3)host-gw模式:主機(jī)網(wǎng)關(guān)

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

[root@server2 ~]# kubectl -n kube-system edit  cm kube-flannel-cfg  
								Type:				   ##修改模式為host-gw
 
[root@server2 ~]# kubectl get pod -n kube-system |grep flannel | awk '{system("kubectl delete pod "$1" -n kube-system")}'  
                                                    ##類似于之前,重啟生效,是一個刪除在生成的過程
 
[root@server3 ~]# ip route                          ##每個節(jié)點(diǎn)都可以通過這條命令查看route,也可以用route -n

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),dockerk8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),dockerk8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

(4)Directrouting:直接路由

[root@server2 ~]# kubectl -n kube-system edit  cm kube-flannel-cfg  ##修改模式
[root@server2 ~]# kubectl get pod -n kube-system |grep flannel | awk '{system("kubectl delete pod "$1" -n kube-system")}'    ##重新生效

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),dockerk8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

三、flannel網(wǎng)絡(luò)插件

使用host-gw模式:每個網(wǎng)段加了靜態(tài)路由,就不需要封裝后走隧道(隧道接口還在,虛擬機(jī)重啟后,接口消失)(上面也有此部分演示)
[root@k8s2 ~]# kubectl -n kube-flannel edit cm kube-flannel-cfg
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
重啟pod生效
[root@k8s2 ~]# kubectl -n kube-flannel delete pod --all
加了靜態(tài)路由 ,訪問10.244.1.0,通過eth0訪問192.168.56.13即可
訪問10.244.2.0,通過eth0訪問192.168.56.14即可
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

四、calico網(wǎng)絡(luò)插件

官方網(wǎng)址:https://docs.tigera.io/
對比flannel,calico支持網(wǎng)絡(luò)策略
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

1.部署:

刪除flannel插件
[root@k8s2 ~]# kubectl delete  -f kube-flannel.yml

刪除所有節(jié)點(diǎn)上flannel配置文件,避免沖突,部署完后,會生成calico文件
[root@k8s2 ~]# rm -f /etc/cni/net.d/10-flannel.conflist
[root@k8s3 ~]# rm -f /etc/cni/net.d/10-flannel.conflist
[root@k8s4 ~]# rm -f /etc/cni/net.d/10-flannel.conflist


下載部署文件
[root@k8s2 calico]# wget  https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

修改鏡像路徑
[root@k8s2 calico]# vim calico.yaml
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),dockerk8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),dockerk8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

下載鏡像
[root@k8s1 ~]# docker pull docker.io/calico/cni:v3.25.0
[root@k8s1 ~]# docker pull docker.io/calico/node:v3.25.0
[root@k8s1 ~]# docker pull docker.io/calico/kube-controllers:v3.25.0

上傳鏡像到harbor

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
部署calico
[root@k8s2 calico]# kubectl apply -f calico.yaml
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

重啟所有集群節(jié)點(diǎn),讓pod重新分配IP
[root@server3 ~]# systemctl daemon-reload
[root@server3 ~]# systemctl restart kubelet

等待集群重啟正常后測試網(wǎng)絡(luò)
[root@k8s1 ~]# curl  myapp.westos.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

2.網(wǎng)絡(luò)策略

(1)限制pod流量

[root@k8s2 calico]# vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp-v1
  policyTypes:                               
    - Ingress              ##控制入站
  ingress:
    - from:                      ##什么樣的數(shù)據(jù)包能進(jìn)來訪問myapp-v1的pod,標(biāo)簽是myapp-v1,就會控制流量
        - podSelector:              
            matchLabels:
              role: test          ##角色
      ports:
        - protocol: TCP
          port: 80

[root@k8s2 calico]# kubectl apply -f networkpolicy.yaml

構(gòu)建的策略顯示如下圖中部分:
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
控制的對象是具有app=myapp-v1標(biāo)簽的pod
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
此時訪問svc是不通的,得符合網(wǎng)絡(luò)策略的流量才可以訪問
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

[root@k8s2 calico]# kubectl run demo --image busyboxplus -it --rm
If you don't see a command prompt, try pressing enter.
/ # curl 10.108.1.129                                                                      ##不通

給測試pod添加指定標(biāo)簽后,可以訪問
[root@k8s2 calico]# kubectl  get pod --show-labels
NAME   READY   STATUS    RESTARTS   AGE   LABELS
demo   1/1     Running   0          61s   run=demo

root@k8s2 calico]# kubectl label pod demo role=test           ##加標(biāo)簽和角色

加角色和標(biāo)簽后,在demo,可以訪問:
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

(2)限制namespace流量

[root@k8s2 calico]# vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp-v1
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:       ##  新建test 中namespace   
            matchLabels:
              project: test
        - podSelector:                   ##和namespace 二選一
            matchLabels:
              role: test
      ports:
        - protocol: TCP
          port: 80

[root@k8s2 calico]# kubectl apply -f networkpolicy.yaml

from后顯示兩個策略:
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
[root@k8s2 ~]# kubectl create namespace test
給namespace添加指定標(biāo)簽:
[root@k8s2 calico]# kubectl label ns test project=test
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
[root@k8s2 calico]# kubectl -n test run demo --image busyboxplus -it --rm
If you don’t see a command prompt, try pressing enter.
/ # curl 10.108.1.129
Hello MyApp | Version: v1 | Pod Name

(3)同時限制namespace和pod

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

[root@k8s2 calico]# vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp-v1
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              project: test
          podSelector:                                  ##相比上面實(shí)驗,去掉“-”;表示同時限制namespace和pod
            matchLabels:
              role: test
      ports:
        - protocol: TCP
          port: 80

[root@k8s2 calico]# kubectl apply -f networkpolicy.yaml

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

給test命令空間中的pod添加指定標(biāo)簽后才能訪問
[root@k8s2 calico]# kubectl -n test label pod demo role=test
pod/demo labeled
[root@k8s2 calico]# kubectl -n test get pod --show-labels
NAME   READY   STATUS    RESTARTS   AGE     LABELS
demo   1/1     Running   0          5m33s   role=test,run=demo

(4)限制集群外部流量

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker

[root@k8s2 calico]# vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp-v1
  policyTypes:
    - Ingress
  ingress:
    - from:
        - ipBlock:                                                      ##限制網(wǎng)段,允許192.168.56.0/24進(jìn)來
            cidr: 192.168.56.0/24
        - namespaceSelector:                                 ##“-”表示或者符合下面的條件
            matchLabels:
              project: myproject
          podSelector:
            matchLabels:
              role: frontend
      ports:
        - protocol: TCP
          port: 80

[root@k8s2 calico]# kubectl apply -f networkpolicy.yaml

k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
k8s網(wǎng)絡(luò)插件,k8s,kubernetes,網(wǎng)絡(luò),docker
[root@k8s1 ~]# curl 192.168.56.101
Hello MyApp | Version: v1 | Pod Name文章來源地址http://www.zghlxwxcb.cn/news/detail-732598.html


到了這里,關(guān)于k8s-kubernetes--網(wǎng)絡(luò)策略、flannel網(wǎng)絡(luò)插件和calico網(wǎng)絡(luò)插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Kubernetes網(wǎng)絡(luò)插件flannel原理簡介

    Kubernetes網(wǎng)絡(luò)插件flannel原理簡介

    Flannel是kubernetes的網(wǎng)絡(luò)插件之一,通過構(gòu)建k8s集群節(jié)點(diǎn)之間的overlay網(wǎng)絡(luò),實(shí)現(xiàn)跨節(jié)點(diǎn)通信等功能。flannel常用的網(wǎng)絡(luò)轉(zhuǎn)發(fā)模式有hostgw、udp、vxlan等,在實(shí)際生產(chǎn)中常用的是vxlan模式。 k8s會為每個集群節(jié)點(diǎn)劃分子網(wǎng),這樣pod調(diào)度到某節(jié)點(diǎn)時,就會按照該節(jié)點(diǎn)的子網(wǎng)網(wǎng)段分配ip,保

    2023年04月18日
    瀏覽(20)
  • Kubernetes(七)修改 pod 網(wǎng)絡(luò)(flannel 插件)

    Kubernetes(七)修改 pod 網(wǎng)絡(luò)(flannel 插件)

    需要重啟服務(wù)器 操作之前備份 k8s 中所有資源的 yaml 文件 如下是備份腳本,僅供參考 集群中每個節(jié)點(diǎn)都要修改 flannel 修改如下內(nèi)容 kube-proxy flannel 和 kube-proxy 是 k8s 中的守護(hù)進(jìn)程,刪除 pod 會自動創(chuàng)建,因此這里只需要刪除現(xiàn)有的 pod 即可。 在所有 master 節(jié)點(diǎn)修改 修改文件

    2024年02月11日
    瀏覽(19)
  • K8S第三講 Kubernetes集群配置網(wǎng)絡(luò)插件

    在Kubernetes集群中,網(wǎng)絡(luò)插件是必需的,因為它們?yōu)镻od提供了可訪問的IP地址,并確保它們能夠相互通信。Kubernetes支持多種網(wǎng)絡(luò)插件,包括Calico、Flannel、Weave Net等。這里以Calico為例介紹如何配置Kubernetes集群的網(wǎng)絡(luò)插件。 插件配置可以參考官網(wǎng): K8S集群網(wǎng)絡(luò)插件列表 1: 安裝

    2024年02月09日
    瀏覽(28)
  • K8s進(jìn)階之網(wǎng)絡(luò):pod內(nèi)不同容器、同節(jié)點(diǎn)不同pod通信、CNI插件、不同節(jié)點(diǎn)pod通信、Flannel容器網(wǎng)絡(luò)、Serivce連接外部網(wǎng)絡(luò)、服務(wù)發(fā)現(xiàn)、Nginx反向代理與域名、Ingress代理

    K8s進(jìn)階之網(wǎng)絡(luò):pod內(nèi)不同容器、同節(jié)點(diǎn)不同pod通信、CNI插件、不同節(jié)點(diǎn)pod通信、Flannel容器網(wǎng)絡(luò)、Serivce連接外部網(wǎng)絡(luò)、服務(wù)發(fā)現(xiàn)、Nginx反向代理與域名、Ingress代理

    Pod是Kubernetes中最小的可部署單元,它是一個或多個緊密關(guān)聯(lián)的容器的組合,這些容器共享同一個網(wǎng)絡(luò)命名空間和存儲卷,因此Pod中的 所有容器都共享相同的網(wǎng)絡(luò)命名空間和IP地址——PodIP ,所以在同一個Pod內(nèi)的容器間通信可以 通過localhost直接通信 。 k8s創(chuàng)建Pod時永遠(yuǎn)都是首先

    2024年02月05日
    瀏覽(24)
  • Kubernetes(k8s):網(wǎng)絡(luò)插件之Calico安裝與詳解

    Kubernetes(k8s):網(wǎng)絡(luò)插件之Calico安裝與詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? 在Kubernetes集群中,網(wǎng)絡(luò)插件對于容器間的通信以及與外部網(wǎng)絡(luò)的連接至關(guān)重要。Calico是一個流行的Kubernetes網(wǎng)絡(luò)插件,它提供了高性能的網(wǎng)絡(luò)和安全解決方案,適用于各種部署場景。 Calico是一個開源的網(wǎng)絡(luò)和安全解決方案,旨在簡化和增

    2024年04月11日
    瀏覽(23)
  • k8s Calico網(wǎng)絡(luò)和flannel網(wǎng)絡(luò)對比

    Calico 和 Flannel 是 Kubernetes(K8s) 中常用的兩種網(wǎng)絡(luò)插件,它們都有各自的優(yōu)點(diǎn)和適用場景。以下是 Calico 網(wǎng)絡(luò)與 Flannel 網(wǎng)絡(luò)的一些主要對比點(diǎn): Calico 1. 技術(shù)基礎(chǔ) :Calico 依賴于 BGP(Border Gateway Protocol)路由協(xié)議來實(shí)現(xiàn)節(jié)點(diǎn)間通信,可以支持大規(guī)模的集群。 2. 性能 :由于使用

    2024年04月27日
    瀏覽(21)
  • 深入 K8s 網(wǎng)絡(luò)原理(一)- Flannel VXLAN 模式分析

    深入 K8s 網(wǎng)絡(luò)原理(一)- Flannel VXLAN 模式分析

    這周集中聊下 K8s 的集群網(wǎng)絡(luò)原理,我初步考慮分成3個方向: Pod-to-Pod ?通信(同節(jié)點(diǎn) or 跨節(jié)點(diǎn)),以 Flannel VXLAN 模式為例; Pod/External-to-Service ?通信,以 iptables 實(shí)現(xiàn)為例; Ingress ?原理,以 NGINX Ingress Controller 實(shí)現(xiàn)為例; 其他:(到時候看心情)Flannel host-gw 模式,Calico,…

    2024年01月17日
    瀏覽(18)
  • [Kubernetes[K8S]集群:master主節(jié)點(diǎn)初始化]:通過Calico和Coredns網(wǎng)絡(luò)插件方式安裝

    [Kubernetes[K8S]集群:master主節(jié)點(diǎn)初始化]:通過Calico和Coredns網(wǎng)絡(luò)插件方式安裝

    主節(jié)點(diǎn):安裝coredns - init初始化 主節(jié)點(diǎn)(此時還沒有安裝calico) 從節(jié)點(diǎn):基于主節(jié)點(diǎn)生成join命令加入集群 主節(jié)點(diǎn):安裝calico:apply 生成pod,此時沒有調(diào)整yaml網(wǎng)卡 coredns 和calico pod 運(yùn)行成功 但是 calico-node-cl8f2 運(yùn)行失敗 查看 解決鏈接 因為之前寫過一篇,calico一直異常,步驟

    2024年04月15日
    瀏覽(19)
  • [kubernetes]-k8s調(diào)整鏡像清理策略

    導(dǎo)語:k8s在磁盤使用率到達(dá)80%之后開始清理鏡像,導(dǎo)致服務(wù)重啟后鏡像被刪除。記錄一下大致調(diào)整的方法

    2024年02月06日
    瀏覽(22)
  • Kubernetes:(十八)flannel網(wǎng)絡(luò)

    Kubernetes:(十八)flannel網(wǎng)絡(luò)

    目錄 一:什么是Flannel 1.1 Flannel實(shí)現(xiàn)原理 1.2?數(shù)據(jù)轉(zhuǎn)發(fā)流程 二:?Flannel網(wǎng)絡(luò)概述 2.1?Vxlan 模式 2.1.1 通信流程 2.1.2 部署 2.1.3?相關(guān)配置 2.1.4 卸載 2.2 Host-GW 模式 2.2.1 通信流程 2.2.2 部署 2.2.3 相關(guān)配置? 2.2.4 卸載 2.3 Flanneld 作用 2.4?模式對比 三:部署 四:故障分析 4.1?kube-proxy 配

    2024年02月12日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包