RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S API資源對象NetworkPolicy介紹

阿銘linux ? 來源:阿銘linux ? 2023-05-10 09:20 ? 次閱讀

NetworkPolicy用來控制Pod與Pod之間的網(wǎng)絡(luò)通信,它也支持針對Namespace進行限制?;诎酌麊文J?,符合規(guī)則的對象通過,不符合的拒絕。 應(yīng)用場景舉例:

Pod A不能訪問Pod B;

開發(fā)環(huán)境所有Pod不能訪問測試命名空間;

提供對外訪問時,限制外部IP;

官方NetworkPolicy YAML示例:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - ipBlock:
            cidr: 172.17.0.0/16
            except:
              - 172.17.1.0/24
        - namespaceSelector:
            matchLabels:
              project: myproject
        - podSelector:
            matchLabels:
              role: frontend
      ports:
        - protocol: TCP
          port: 6379
  egress:
    - to:
        - ipBlock:
            cidr: 10.0.0.0/24
      ports:
        - protocol: TCP
          port: 5978
說明:必需字段:apiVersion、 kind 和 metadata 字段。

podSelector:定義目標(biāo)Pod的匹配標(biāo)簽,即哪些Pod會生效此策略;

policyTypes:表示給定的策略是應(yīng)用于目標(biāo)Pod的入站流量(Ingress)還是出站流量(Egress),或兩者兼有。如果NetworkPolicy未指定policyTypes則默認情況下始終設(shè)置Ingress。

ingress:定義入流量限制規(guī)則,from用來定義白名單對象,比如網(wǎng)段、命名空間、Pod標(biāo)簽,Ports定義目標(biāo)端口。

egress:定義出流量限制規(guī)則,定義可以訪問哪些IP和端口

案例一: 需求:aming命名空間下所有Pod可以互相訪問,也可以訪問其他命名空間Pod,但其他命名空間不能訪問aming命名空間Pod。 首先創(chuàng)建幾個Pod:

kubectl run busybox --image=busybox -- sleep 3600  ## default命名空間里創(chuàng)建busybox Pod
kubectl run busybox --image=busybox -n aming -- sleep 3600    ## aming命名空間里創(chuàng)建busybox Pod
kubectl run web --image=nginx:1.23.2 -n aming  ## aming命名空間里創(chuàng)建web pod
在沒有創(chuàng)建NetworkPolicy的情況下測試
kubectl exec busybox -n aming -- ping 10.18.235.161  ##aming命名空間的busybox ping default命名空間的busybox IP 
kubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空間的busybox ping aming命名空間的web IP
kubectl exec busybox -- ping 10.18.235.162 ##default命名空間的busybox ping aming命名空間的web IP
創(chuàng)建networkpolicy的YAML
vi  deny-all-namespaces.yaml  ##內(nèi)容如下
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-namespaces
  namespace: aming
spec:
  podSelector: {} # 為空,表示匹配本命名空間所有Pod
  policyTypes:
  - Ingress
  ingress:
    - from:
      - podSelector: {} # 為空,表示匹配該命名空間所有Pod,即允許該命名空間所有Pod訪問,沒有定義namespaceSelector,也就是說不允許其它namespace的Pod訪問。
應(yīng)用YAML
kubectl apply -f deny-all-namespaces.yaml
測試:
kubectl exec busybox -n aming -- ping 10.18.235.161  ##aming命名空間的busybox ping default命名空間的busybox IP
kubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空間的busybox ping aming命名空間的web IP
kubectl exec busybox -- ping 10.18.235.162 ##default命名空間的busybox ping aming命名空間的web IP
將剛剛創(chuàng)建的所有資源刪除:
kubectl delete po busybox  --force
kubectl delete po busybox -n aming --force
kubectl delete po web -n aming
kubectl delete -f deny-all-namespaces.yaml
案例二: 通過PodSelector限制
vipod-selector.yaml##內(nèi)容如下
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-to-app
  namespace: aming
spec:
  podSelector:
    matchLabels:
      app: test
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: dev
      ports:
        - protocol: TCP
          port: 80
應(yīng)用YAML
kubectl apply -f pod-selector.yaml
創(chuàng)建測試pod
kubectl run web01 --image=nginx:1.23.2 -n aming -l 'app=test'  #創(chuàng)建Pod時,指定label
kubectl get pod web01 -n aming --show-labels # 查看label
# 如果label創(chuàng)建錯了,也可以修改,在本實驗中不需要做如下操作
# kubectl label pod busybox app=test123 --overwrite 
kubectl run app01 --image=nginx:1.23.2 -n aming -l 'app=dev' 
kubectl run app02 --image=nginx:1.23.2 -n aming
查看web01的IP
kubectl describe po web01 -n aming |grep -i ip
測試
kubectl exec -n aming app01 -- curl 10.18.235.170
kubectl exec -n aming app02 -- curl 10.18.235.170
測試成功后,刪除掉剛剛創(chuàng)建的資源
kubectl delete po app01 -n aming
kubectl delete po app02 -n aming
kubectl delete po web01 -n aming
kubectl delete -f pod-selector.yaml
案例三: 限制namespace
viallow-ns.yaml#內(nèi)容如下
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ns
  namespace: aming
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              name: test
      ports:
        - protocol: TCP
          port: 80
應(yīng)用YAML
kubectl apply -f allow-ns.yaml
創(chuàng)建測試ns
kubectl create ns test
創(chuàng)建測試pod
kubectl run web01 --image=nginx:1.23.2 -n aming
kubectl run web02 --image=nginx:1.23.2 -n test
kubectl run web03 --image=nginx:1.23.2 
kubectl run web04 --image=nginx:1.23.2 -n aming
查看web01的IP
kubectl describe po web01 -n aming |grep -i ip
查看ns label
kubectl get ns --show-labels
給ns設(shè)置標(biāo)簽
kubectl label namespace test name=test
測試:
kubectl -n test exec web02 -- curl 10.18.235.172  #可以訪問
kubectl exec web03 -- curl 10.18.235.172 #不可以訪問
kubectl -n aming exec web04 -- curl 10.18.235.172  #不可以訪問,即使同一個命名空間也無法訪問

以上為NetworkPolicy的主要內(nèi)容,你看明白了嗎?






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • YAML
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    2322
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4221

原文標(biāo)題:K8S API資源對象NetworkPolicy

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    K8S容器編排的互通測試

    K8S容器編排之NetWorkPolicy官方實例
    發(fā)表于 06-06 11:28

    Kubernetes NetworkPolicy在Calico上的工作原理介紹

    K8S容器編排之NetWorkPolicy工作原理淺析
    發(fā)表于 06-11 16:05

    OpenStack與K8s結(jié)合的兩種方案的詳細介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.7w次閱讀

    如何使用kubernetes client-go實踐一個簡單的與K8s交互過程

    【導(dǎo)讀】Kubernetes項目使用Go語言編寫,對Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實踐一個簡單的與K8s交互過程
    的頭像 發(fā)表于 02-02 11:16 ?6842次閱讀
    如何使用kubernetes client-go實踐一個簡單的與<b class='flag-5'>K8s</b>交互過程

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發(fā)表于 06-02 11:56 ?3436次閱讀

    簡單說明k8s和Docker之間的關(guān)系

    這篇文章主要介紹k8s和Docker關(guān)系簡單說明,本文利用圖文講解的很透徹,有需要的同學(xué)可以研究下 最近項目用到kubernetes(以下簡稱k8s,k
    的頭像 發(fā)表于 06-24 15:48 ?3403次閱讀

    K8S集群服務(wù)訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務(wù)訪問失??? ? ? 原因分析:證書不能被識別,其原因為:自定義證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務(wù)訪問失??? curl: (7) Failed
    的頭像 發(fā)表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務(wù)訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是一個開源的,用于管理云平臺中多個主機上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1113次閱讀

    什么是K3sK8sK3sK8s有什么區(qū)別?

    Kubernetes,通??s寫為 K8s,是領(lǐng)先的容器編排工具。該開源項目最初由 Google 開發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?7511次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1229次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

    K8S API資源對象-CRD介紹

    在Kubernetes中,像Pod、Service和Deployment這樣的資源是由內(nèi)置的資源類型如Pod、Service和Deployment表示的。
    的頭像 發(fā)表于 08-08 10:21 ?1113次閱讀

    K8s多集群管理:為什么需要多集群、多集群的優(yōu)勢是什么

    隨著K8s和云原生技術(shù)的快速發(fā)展,以及各大廠商在自己的數(shù)據(jù)中心使用K8sAPI進行容器化應(yīng)用編排和管理,讓應(yīng)用交付本身變得越來越標(biāo)準(zhǔn)化和統(tǒng)一化,并且實現(xiàn)了與底層基礎(chǔ)設(shè)施的完全解耦,為多集群和混合云提供了一個堅實技術(shù)基礎(chǔ)。
    發(fā)表于 09-14 10:48 ?1298次閱讀
    <b class='flag-5'>K8s</b>多集群管理:為什么需要多集群、多集群的優(yōu)勢是什么

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)插件以實現(xiàn)資源互通。然后,編寫Deployment文件部署應(yīng)用,并使用kubectl命令
    的頭像 發(fā)表于 11-07 09:37 ?140次閱讀

    k8s和docker區(qū)別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開發(fā)和單主機管理;而K8s則提供容器編排和管理平臺,適用于多主機或云環(huán)境,具備自動化
    的頭像 發(fā)表于 12-11 13:55 ?70次閱讀
    RM新时代网站-首页