日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用 Sidecar CRD 優化 Istio 性能

來源: 責編: 時間:2023-12-18 09:46:42 224觀看
導讀我們知道在服務網格集群中的每個工作負載實例上都會透明地注入一個 Istio sidecar 代理,這個代理攔截負載的出入流量,并根據配置完成相應的流量管理,包括流量、安全、可觀測性等等。為了更加細粒度的控制代理的行為,從 1.

SUp28資訊網——每日最新資訊28at.com

我們知道在服務網格集群中的每個工作負載實例上都會透明地注入一個 Istio sidecar 代理,這個代理攔截負載的出入流量,并根據配置完成相應的流量管理,包括流量、安全、可觀測性等等。為了更加細粒度的控制代理的行為,從 1.1 版本開始 Istio 便引入了和服務網格數據面 Sidecar 同名的 Sidecar CRD 資源對象,控制負載上的出入流量以及課訪問的目標服務等。SUp28資訊網——每日最新資訊28at.com

SUp28資訊網——每日最新資訊28at.com

SUp28資訊網——每日最新資訊28at.com

Sidecar 對象描述了 sidecar 代理的配置,sidecar 代理管理與其連接的工作負載的 inbound 和 outbound 流量。默認情況下,Istio 將為網格中的所有 sidecar 代理服務,使其具有到達網格中每個工作負載所需的必要配置,并在與工作負載關聯的所有端口上接收流量。Sidecar 資源提供了一種的方法,在向工作負載轉發流量或從工作負載轉發流量時,微調端口集合和代理將接收的協議,此外,可以限制代理在從工作負載轉發 outbound 流量時可以達到的服務集合。SUp28資訊網——每日最新資訊28at.com

比如我們可以創建一個如下所示的 Sidecar 對象:SUp28資訊網——每日最新資訊28at.com

apiVersion: networking.istio.io/v1beta1kind: Sidecarmetadata:  name: test-scspec:  egress:    - hosts:        - "istio-system/*"        - "default/*"

在上面的 Sidecar 對象中我們指定了 egress 字段,這個字段用于指定 sidecar 代理的出口流量,其中 hosts 字段用于指定 sidecar 代理可以訪問的目標服務,這里我們指定了 istio-system/* 和 default/*,意思是我們可以控制 default 命名空間下的 sidecar 代理只可以訪問 istio-system 和 default 命名空間下的服務,其他命名空間下的服務則無法訪問。SUp28資訊網——每日最新資訊28at.com

整體上 Sidecar 對象的核心包括四個字段:workloadSelector、ingress 與 egress、outboundTrafficPolicy。SUp28資訊網——每日最新資訊28at.com

  • workloadSelector:這個字段用來指定 sidecar 代理所屬的工作負載,可以通過標簽來指定,如果沒有指定則會應用到當前命名空間下所有的工作負載上(每個命名空間下只能定義一個全局的 Sidecar 對象),如果定義在根命名空間 istio-system 下則會應用到所有命名空間下的工作負載上。需要注意的是如果一個命名空間下存在多個 workloadSelector 的 Sidecar 選中同樣的負載,則也會出現問題,所有要注意避免這種情況。
  • egress:這個字段用來配置 sidecar 代理對服務網格內部其他服務的訪問,如果沒有配置則默認命名空間下的所有服務都可以訪問,如果配置了則只能訪問配置的服務。該字段下面可以配置如下幾個參數:
  • hosts:這是一個必選的字段,表示監聽器對應的服務地址,格式為 <namespace>/<FQDN>,可以對 namespace、FQDN 進行通配符匹配,比如 default/* 表示 default 命名空間下的所有服務,*/foo 表示所有命名空間下的 foo 服務,*/* 表示允許目標是任意命名空間下的任意服務,~/* 表示禁止目標是任意命名空間下的任意服務。
  • port:監聽器關聯的端口。
  • bind:監聽器綁定的地址。
  • captureMode:配置流量捕獲模式,可以是 DEFAULT、IPTABLES、NONE 三種模式,默認是 DEFAULT,DEFAULT 模式表示使用環境默認的流量捕獲規則;IPTABLES 模式表示基于 iptables 規則轉發的流量,NONE 模式表示沒有流量攔截。
  • ingress:這個字段用來配置 sidecar 代理對應工作負載的入流量控制。該字段下面可以配置如下幾個參數:
  • port:這是一個必選的字段,表示監聽器對應的端口。SUp28資訊網——每日最新資訊28at.com

  • bind:監聽器綁定的地址。SUp28資訊網——每日最新資訊28at.com

  • captureMode:配置流量捕獲模式,與 egress 中的 captureMode 字段一樣。SUp28資訊網——每日最新資訊28at.com

  • defaultEndpoint:也是必選字段,表示流量的轉發目標地址,比如 127.0.0.1:port 或者 0.0.0.0:port。SUp28資訊網——每日最新資訊28at.com

  • SUp28資訊網——每日最新資訊28at.com

    outboundTrafficPolicy:這個字段用來配置 sidecar 代理對應工作負載的出流量控制,該字段有兩種訪問配置:SUp28資訊網——每日最新資訊28at.com

    SUp28資訊網——每日最新資訊28at.com

  • ALLOW_ANY:表示允許訪問任意服務,sidecar 代理在攔截到這個出流量后,會直接透傳。SUp28資訊網——每日最新資訊28at.com

  • REGISTRY_ONLY:sidecar 代理會攔截所有的出口流量,只允許服務網格內部服務可以被訪問,對于外部服務需要使用 ServiceEntry 注冊才可以被訪問。SUp28資訊網——每日最新資訊28at.com

Sidecar 對象可以定義在根命名空間 istio-system 下,這樣就會應用到所有命名空間下的工作負載上,比如我們可以創建一個如下所示的 Sidecar 對象:SUp28資訊網——每日最新資訊28at.com

# global-sidecar.yamlapiVersion: networking.istio.io/v1beta1kind: Sidecarmetadata:  name: default  namespace: istio-systemspec:  egress:    - hosts:        - "./*"

上面的這個 Sidecar 對象定義在 istio-system 命名空間下,這樣就會應用到所有命名空間下的工作負載上,其中 egress 字段中的 hosts 字段指定了可以訪問的服務,這里我們指定了 "./*",表示限制整個服務網格中的服務只能訪問本命名空間的服務。在實踐中我們推薦使用這種方式在全局范圍定義一個統一的 Sidecar 規則,然后在特定的命名空間下再定義一個 Sidecar 對象來覆蓋全局的 Sidecar 規則。SUp28資訊網——每日最新資訊28at.com

比如我們可以在 default 命名空間下創建一個如下所示的 Sidecar 對象來覆蓋上面全局的這個對象:SUp28資訊網——每日最新資訊28at.com

# default-sidecar.yamlapiVersion: networking.istio.io/v1beta1kind: Sidecarmetadata:  name: default  namespace: defaultspec:  egress:    - hosts:        - "foo/*"

這個對象就允許 default 命名空間的服務可以訪問 foo 命名空間的服務。SUp28資訊網——每日最新資訊28at.com

同樣我們還可以使用 workloadSelector 字段來指定 sidecar 代理所屬的工作負載,比如我們可以創建一個如下所示的 Sidecar 對象:SUp28資訊網——每日最新資訊28at.com

# default-sidecar.yamlapiVersion: networking.istio.io/v1beta1kind: Sidecarmetadata:  name: default  namespace: defaultspec:  workloadSelector:    labels:      app: bar  egress:    - hosts:        - "bar/foo-api"

上面的這個對象只會應用到 app: bar 標簽的工作負載上,并覆蓋以上命名空間級別的規則,使得 default 命名空間下面的 app: bar 標簽的工作負載只能訪問 bar 命名空間下面的 foo-api 服務。SUp28資訊網——每日最新資訊28at.com

接下來我們使用 sleep 和 httpbin 應用來進行測試說明,將這兩個應用部署到 default 和 other 兩個命名空間下面:SUp28資訊網——每日最新資訊28at.com

kubectl create ns otherkubectl label ns other istio-injectinotallow=enabledkubectl apply -f samples/sleep/sleep.yaml -n defaultkubectl apply -f samples/sleep/sleep.yaml -n otherkubectl apply -f samples/httpbin/httpbin.yaml -n defaultkubectl apply -f samples/httpbin/httpbin.yaml -n other

默認情況下,注入了 Istio 的工作負載會進行全網格的傳播,假設 default 和 other 兩個不相干的命名空間,other 中有大量的服務,而 default 中只有幾個,因為路由傳播的關系,default 命名空間中的工作負載,其 sidecar 代理中也會帶上 other 命名空間中的路由信息。例如:SUp28資訊網——每日最新資訊28at.com

$ istioctl proxy-config clusters sleep-9454cc476-jfw97 |grep otherhttpbin.other.svc.cluster.local                                        8000      -               outbound      EDSsleep.other.svc.cluster.local                                          80        -               outbound      EDS

可以看到,在 default 命名空間中的 Pod,保存了其它命名空間中的路由信息。這不管是對內存消耗還是路由控制來說,都會造成一定浪費,這個時候我們就可以定義一個 Sidecar 資源,限制 sleep 服務只訪問同一命名空間的其他服務,如下所示:SUp28資訊網——每日最新資訊28at.com

# sleep-sidecar.yamlapiVersion: networking.istio.io/v1alpha3kind: Sidecarmetadata:  name: sleepspec:  workloadSelector:    labels:      app: sleep  egress:    - hosts:        - "default/*"

直接應用上面的資源對象即可:SUp28資訊網——每日最新資訊28at.com

$ kubectl apply -f sleep-sidecar.yaml$ kubectl get sidecarNAME    AGEsleep   16s

這個時候可以看到在 sleep 應用中只剩下了本命名空間之內的服務了:SUp28資訊網——每日最新資訊28at.com

$ istioctl proxy-config clusters sleep-9454cc476-jfw97SERVICE FQDN                              PORT     SUBSET          DIRECTION     TYPE             DESTINATION RULE                                          80       -               inbound       ORIGINAL_DSTBlackHoleCluster                          -        -               -             STATICInboundPassthroughClusterIpv4             -        -               -             ORIGINAL_DSTPassthroughCluster                        -        -               -             ORIGINAL_DSTagent                                     -        -               -             STATIChttpbin.default.svc.cluster.local         8000     -               outbound      EDSkubernetes.default.svc.cluster.local      443      -               outbound      EDSprometheus_stats                          -        -               -             STATICsds-grpc                                  -        -               -             STATICsleep.default.svc.cluster.local           80       -               outbound      EDSxds-grpc                                  -        -               -             STATICzipkin                                    -        -               -             STRICT_DNS

現在我們可以在 sleep 應用中去訪問下 httpbin 的應用:SUp28資訊網——每日最新資訊28at.com

$ kubectl exec -it sleep-9454cc476-jfw97 -- curl http://httpbin.default:8000/ip{  "origin": "127.0.0.6"}

可以看到 default 命名空間下面的應用可以正常訪問,那么對于 other 命名空間下面的服務正常就不能訪問了。SUp28資訊網——每日最新資訊28at.com

$ kubectl exec -it sleep-9454cc476-jfw97 -- curl http://httpbin.other.svc.cluster.local:8000/ip

可以看到 default 命名空間下面的應用無法訪問 other 命名空間下面的服務了。SUp28資訊網——每日最新資訊28at.com

Istio 默認情況下,服務網格內部的所有數據面代理都通過 xDS 從控制面獲取全量的配置,這種方式在數據面代理數量較少的情況下是沒有問題的,但是當數據面代理數量較多的大規模服務網格的場景下,這種方式顯然會造成性能問題,全量的配置會引起數據面代理的內存暴漲,所以 Sidecar 對象是非常有必要的,通過 Sidecar 對象只維護少量依賴服務的配置,可以大大減少無用的內存消耗,所以在生產環境中我們推薦大家使用 Sidecar 對象來控制數據面代理的配置。SUp28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-48344-0.html使用 Sidecar CRD 優化 Istio 性能

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 嘗試借助CSS @container實現多行文本展開收起

下一篇: Eslint 會被 Oxlint 干掉嗎?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 精河县| 鄂州市| 平遥县| 孙吴县| 丽江市| 屯留县| 定日县| 鸡东县| 梧州市| 忻城县| 镇坪县| 榆林市| 姜堰市| 怀柔区| 兴隆县| 华坪县| 辽宁省| 鲁山县| 合江县| 临漳县| 阳泉市| 灌阳县| 措美县| 靖州| 曲阳县| 阿城市| 利津县| 射洪县| 神池县| 安丘市| 武义县| 新泰市| 绥芬河市| 金塔县| 珠海市| 米林县| 大邑县| 濮阳市| 苏尼特右旗| 济源市| 周至县|