亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

        Kubernetes網(wǎng)絡(luò)策略之詳解

        Kubernetes網(wǎng)絡(luò)策略之詳解

        NetWork Policy簡(jiǎn)介

        隨著微服務(wù)架構(gòu)的日漸盛行,Serverless框架的逐步落地,應(yīng)用上云后帶來(lái)了模塊間網(wǎng)絡(luò)調(diào)用需求的大規(guī)模增長(zhǎng),Kubernetes 自 1.3 引入了 Network Policy,其提供以應(yīng)用為中心, 基于策略的網(wǎng)絡(luò)控制,用于隔離應(yīng)用以減少攻擊面。

        網(wǎng)絡(luò)策略(Network Policy )是 Kubernetes 的一種資源。Network Policy 通過(guò) Label 選擇 Pod,并指定其他 Pod 或外界如何與這些 Pod 通信。

        Pod的網(wǎng)絡(luò)流量包含流入(Ingress)和流出(Egress)兩種方向。默認(rèn)情況下,所有 Pod 是非隔離的,即任何來(lái)源的網(wǎng)絡(luò)流量都能夠訪問(wèn) Pod,沒(méi)有任何限制。當(dāng)為 Pod 定義了 Network Policy,只有 Policy 允許的流量才能訪問(wèn) Pod。

        Pod之間能否通信可通過(guò)如下三種組合進(jìn)行確認(rèn):

        • 其他被允許的 Pods(例如:Pod 無(wú)法限制對(duì)自身的訪問(wèn))
        • 被允許訪問(wèn)的namespace
        • IP CIDR(例如:與 Pod 運(yùn)行所在節(jié)點(diǎn)的通信總是被允許的)

        在定義基于 Pod 或namespace的 NetworkPolicy 時(shí),可以使用標(biāo)簽選擇器來(lái)設(shè)定哪些流量可以進(jìn)入或離開(kāi) Pod。同時(shí),當(dāng)創(chuàng)建基于 IP 的 NetworkPolicy 時(shí),可以基于 IP CIDR 來(lái)定義策略。

        Kubernetes的網(wǎng)絡(luò)策略功能也是由第三方的網(wǎng)絡(luò)插件實(shí)現(xiàn)的,因此,只有支持網(wǎng)絡(luò)策略功能的網(wǎng)絡(luò)插件才能進(jìn)行配置網(wǎng)絡(luò)策略,比如Calico、Canal、kube-router等等。

        部署calico網(wǎng)絡(luò)插件提供網(wǎng)絡(luò)策略功能

        Calico可以獨(dú)立地為Kubernetes提供網(wǎng)絡(luò)解決方案和網(wǎng)絡(luò)策略,也可以和flannel相結(jié)合,由flannel提供網(wǎng)絡(luò)解決方案,Calico僅用于提供網(wǎng)絡(luò)策略,此時(shí)將Calico稱(chēng)為Canal。結(jié)合flannel工作時(shí),Calico提供的默認(rèn)配置清單式以flannel默認(rèn)使用的10.244.0.0/16為Pod網(wǎng)絡(luò),因此在集群中kube-controller-manager啟動(dòng)時(shí)就需要通過(guò)–cluster-cidr選項(xiàng)進(jìn)行設(shè)置使用該網(wǎng)絡(luò)地址,并且—allocate-node-cidrs的值應(yīng)設(shè)置為true。

        本文使用calico作為網(wǎng)絡(luò)插件,并提供網(wǎng)絡(luò)策略功能來(lái)加以說(shuō)明

        1、下載calico安裝文件,修改網(wǎng)段

        curl -LO https://docs.projectcalico.org/archive/v3.15/manifests/calico.yaml

        將配置文件中CALICO_IPV4POOL_CIDR注釋取消,并將值修改為: 10.244.0.0/16

        2、安裝calico

        kca -f calico.yaml

        配置網(wǎng)絡(luò)策略

        在Kubernetes系統(tǒng)中,報(bào)文的流入和流出的核心組件是Pod資源,它們也是網(wǎng)絡(luò)策略功能的主要應(yīng)用對(duì)象。NetworkPolicy對(duì)象通過(guò)podSelector選擇 一組Pod資源作為控制對(duì)象。NetworkPolicy是定義在一組Pod資源之上用于管理入站流量,或出站流量的一組規(guī)則,有可以是出入站規(guī)則一起生效,規(guī)則的生效模式通常由spec.policyTypes進(jìn)行 定義。如下圖:

        默認(rèn)情況下,Pod對(duì)象的流量控制是為空的,報(bào)文可以自由出入。在附加網(wǎng)絡(luò)策略之后,Pod對(duì)象會(huì)因?yàn)镹etworkPolicy而被隔離,一旦名稱(chēng)空間中有任何NetworkPolicy對(duì)象匹配了某特定的Pod對(duì)象,則該P(yáng)od將拒絕NetworkPolicy規(guī)則中不允許的所有連接請(qǐng)求,但是那些未被匹配到的Pod對(duì)象依舊可以接受所有流量。

        就特定的Pod集合來(lái)說(shuō),入站和出站流量默認(rèn)是放行狀態(tài),除非有規(guī)則可以進(jìn)行匹配。還有一點(diǎn)需要注意的是,在spec.policyTypes中指定了生效的規(guī)則類(lèi)型,但是在networkpolicy.spec字段中嵌套定義了沒(méi)有任何規(guī)則的Ingress或Egress時(shí),則表示拒絕入站或出站的一切流量。定義網(wǎng)絡(luò)策略的基本格式如下:

        apiVersion: networking.k8s.io/v1#定義API版本kind: NetworkPolicy #定義資源類(lèi)型metadata: name: allow-myapp-ingress #定義NetwokPolicy的名字 namespace: defaultspec: #NetworkPolicy規(guī)則定義 podSelector: #匹配擁有標(biāo)簽app:myapp的Pod資源 matchLabels: app: myapp policyTypes: #NetworkPolicy類(lèi)型,可以是Ingress,Egress,或者兩者共存 – Ingress – Egress ingress: #定義入站規(guī)則 – from: – ipBlock: #定義可以訪問(wèn)的網(wǎng)段 cidr: 10.244.0.0/16 except: #排除的網(wǎng)段 – 10.244.3.0/24 – podSelector: #選定當(dāng)前default名稱(chēng)空間,標(biāo)簽為app:myapp可以入站 matchLabels: app: myapp ports: #開(kāi)放的協(xié)議和端口定義 – protocol: TCP port: 80 egress: – to: – ipBlock: #指定端口上的流量匹配到 10.244.0.0/24 中的任何目的地 cidr: 10.244.0.0/24 ports: – protocol: TCP port: 80 該網(wǎng)絡(luò)策略就是將default名稱(chēng)空間中擁有標(biāo)簽”app=myapp”的Pod資源開(kāi)放80/TCP端口給10.244.0.0/16網(wǎng)段,并排除10.244.3.0/24網(wǎng)段的訪問(wèn),并且也開(kāi)放給標(biāo)簽為app=myapp的所有Pod資源進(jìn)行訪問(wèn)。

        • 必需字段:與所有其他的 Kubernetes 對(duì)象一樣,NetworkPolicy 需要 apiVersion、 kind 和 metadata 字段。
        • spec:NetworkPolicy 規(guī)約中包含了在名字空間中定義特定網(wǎng)絡(luò)策略所需的所有信息。
        • podSelector:每個(gè) NetworkPolicy 都包括一個(gè) podSelector,它選擇適用該該策略的 Pod。示例中的策略選擇帶有 “app=myapp” 標(biāo)簽的 Pod。若podSelector為空的,則選擇名字空間下所有 Pod。
        • policyTypes: 每個(gè) NetworkPolicy 都包含一個(gè) policyTypes 列表,其中包含 Ingress 或 Egress 或(兩者亦可)。policyTypes 字段表示給定的策略是應(yīng)用于 所選 Pod 的入口流量還是來(lái)出口流量(兩者亦可)。如果 NetworkPolicy 未指定 policyTypes 則默認(rèn)情況下始終設(shè)置 Ingress;如果 NetworkPolicy 有任何出口規(guī)則的話則設(shè)置 Egress。
        • ingress: 每個(gè) NetworkPolicy 可包含一個(gè) ingress 規(guī)則的白名單列表。每個(gè)規(guī)則都允許同時(shí)匹配 from 和 ports 部分的流量。示例策略中包含一條 簡(jiǎn)單的規(guī)則:它匹配某個(gè)特定端口,第一個(gè)通過(guò) ipBlock 指定,第二個(gè)通過(guò) podSelector 指定。
        • egress: 每個(gè) NetworkPolicy 可包含一個(gè) egress 規(guī)則的白名單列表。每個(gè)規(guī)則都允許匹配 to 和 port 部分的流量。該示例策略包含一條規(guī)則, 該規(guī)則指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

        該網(wǎng)絡(luò)策略總結(jié)如下:

        • 隔離 default名字空間下 app=myapp 的 Pod 。
        • 出口限制:允許符合以下條件的 Pod 連接到 default名字空間下標(biāo)簽為 app=myapp的所有 Pod 的 80 TCP 端口:
          • a) default名字空間下帶有 app=myapp 標(biāo)簽的所有 Pod
          • b) IP 地址范圍為10.244.0.0–10.244.0.255 和 10.244.3.0–10.244.255.255(即除了 10.244.3.0/24 之外的所有 10.244.0.0/16)
        • 入口限制:允許從帶有 app=myapp標(biāo)簽的名字空間下的任何 Pod 到 CIDR 10.244.0.0/16 下 80 TCP 端口。

        部署應(yīng)用

        1、部署nginx服務(wù)

        [root@localhost ~]# kubectl create deployment nginx –image=nginxdeployment.apps/nginx created[root@localhost ~]# kubectl expose deployment nginx –port=80service/nginx exposed

        2、測(cè)試網(wǎng)絡(luò)

        [root@localhost ~]# kubectl get svc,podNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/kubernetes ClusterIP 10.96.0.1 443/TCP 9dservice/nginx ClusterIP 10.105.249.196 80/TCP 22mNAME READY STATUS RESTARTS AGEpod/nginx-6799fc88d8-dpqrp 1/1 Running 0 22m[root@localhost ~]# kubectl run busybox –rm -ti –image=busybox /bin/shIf you don’t see a command prompt, try pressing enter./ # wget –spider –timeout=1 nginxConnecting to nginx (10.105.249.196:80)remote file exists

        3、測(cè)試網(wǎng)絡(luò)策略

        如果只讓那些擁有標(biāo)簽 access: true 的 Pod 訪問(wèn) nginx 服務(wù), 那么可以創(chuàng)建一個(gè)如下所示的 NetworkPolicy 對(duì)象:

        cat << EOF | kubectl apply -f -apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: access-nginxspec: podSelector: matchLabels: app: nginx ingress: – from: – podSelector: matchLabels: access: "true"EOFnetworkpolicy.networking.k8s.io/access-nginx created

        • 不帶 access=true 標(biāo)簽的 Pod 還是無(wú)法訪問(wèn) nginx 服務(wù)
        • 1 2 3 4 5 [root@localhost ~]# kubectl run busybox –rm -ti –image=busybox /bin/sh If you don’t see a command prompt, try pressing enter. / # wget –spider –timeout=1 nginx Connecting to nginx (10.105.249.196:80) wget: download timed out
        • 而帶有 access=true 標(biāo)簽的 Pod 可以訪問(wèn) nginx 服務(wù)
        • 1 2 3 4 5 [root@localhost ~]# kubectl run busybox –rm -ti –labels=”access=true” –image=busybox /bin/sh If you don’t see a command prompt, try pressing enter. / # wget –spider –timeout=1 nginx Connecting to nginx (10.105.249.196:80) remote file exists
        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
        上一篇 2022年6月19日 21:10
        下一篇 2022年6月19日 21:10

        相關(guān)推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息