偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用 Sidecar CRD 優(yōu)化 Istio 性能

開(kāi)發(fā) 前端
Sidecar 對(duì)象描述了 Sidecar 代理的配置,Sidecar 代理管理與其連接的工作負(fù)載的Inbound 和 Outbound 流量。默認(rèn)情況下,Istio 將為網(wǎng)格中的所有 Sidecar 代理服務(wù),使其具有到達(dá)網(wǎng)格中每個(gè)工作負(fù)載所需的必要配置,并在與工作負(fù)載關(guān)聯(lián)的所有端口上接收流量。

我們知道在服務(wù)網(wǎng)格集群中的每個(gè)工作負(fù)載實(shí)例上都會(huì)透明地注入一個(gè) Istio sidecar 代理,這個(gè)代理攔截負(fù)載的出入流量,并根據(jù)配置完成相應(yīng)的流量管理,包括流量、安全、可觀測(cè)性等等。為了更加細(xì)粒度的控制代理的行為,從 1.1 版本開(kāi)始 Istio 便引入了和服務(wù)網(wǎng)格數(shù)據(jù)面 Sidecar 同名的 Sidecar CRD 資源對(duì)象,控制負(fù)載上的出入流量以及課訪問(wèn)的目標(biāo)服務(wù)等。

Sidecar 對(duì)象描述了 sidecar 代理的配置,sidecar 代理管理與其連接的工作負(fù)載的 inbound 和 outbound 流量。默認(rèn)情況下,Istio 將為網(wǎng)格中的所有 sidecar 代理服務(wù),使其具有到達(dá)網(wǎng)格中每個(gè)工作負(fù)載所需的必要配置,并在與工作負(fù)載關(guān)聯(lián)的所有端口上接收流量。Sidecar 資源提供了一種的方法,在向工作負(fù)載轉(zhuǎn)發(fā)流量或從工作負(fù)載轉(zhuǎn)發(fā)流量時(shí),微調(diào)端口集合和代理將接收的協(xié)議,此外,可以限制代理在從工作負(fù)載轉(zhuǎn)發(fā) outbound 流量時(shí)可以達(dá)到的服務(wù)集合。

比如我們可以創(chuàng)建一個(gè)如下所示的 Sidecar 對(duì)象:

apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: test-sc
spec:
  egress:
    - hosts:
        - "istio-system/*"
        - "default/*"

在上面的 Sidecar 對(duì)象中我們指定了 egress 字段,這個(gè)字段用于指定 sidecar 代理的出口流量,其中 hosts 字段用于指定 sidecar 代理可以訪問(wèn)的目標(biāo)服務(wù),這里我們指定了 istio-system/* 和 default/*,意思是我們可以控制 default 命名空間下的 sidecar 代理只可以訪問(wèn) istio-system 和 default 命名空間下的服務(wù),其他命名空間下的服務(wù)則無(wú)法訪問(wèn)。

整體上 Sidecar 對(duì)象的核心包括四個(gè)字段:workloadSelector、ingress 與 egress、outboundTrafficPolicy。

  • workloadSelector:這個(gè)字段用來(lái)指定 sidecar 代理所屬的工作負(fù)載,可以通過(guò)標(biāo)簽來(lái)指定,如果沒(méi)有指定則會(huì)應(yīng)用到當(dāng)前命名空間下所有的工作負(fù)載上(每個(gè)命名空間下只能定義一個(gè)全局的 Sidecar 對(duì)象),如果定義在根命名空間 istio-system 下則會(huì)應(yīng)用到所有命名空間下的工作負(fù)載上。需要注意的是如果一個(gè)命名空間下存在多個(gè) workloadSelector 的 Sidecar 選中同樣的負(fù)載,則也會(huì)出現(xiàn)問(wèn)題,所有要注意避免這種情況。
  • egress:這個(gè)字段用來(lái)配置 sidecar 代理對(duì)服務(wù)網(wǎng)格內(nèi)部其他服務(wù)的訪問(wèn),如果沒(méi)有配置則默認(rèn)命名空間下的所有服務(wù)都可以訪問(wèn),如果配置了則只能訪問(wèn)配置的服務(wù)。該字段下面可以配置如下幾個(gè)參數(shù):
  • hosts:這是一個(gè)必選的字段,表示監(jiān)聽(tīng)器對(duì)應(yīng)的服務(wù)地址,格式為 <namespace>/<FQDN>,可以對(duì) namespace、FQDN 進(jìn)行通配符匹配,比如 default/* 表示 default 命名空間下的所有服務(wù),*/foo 表示所有命名空間下的 foo 服務(wù),*/* 表示允許目標(biāo)是任意命名空間下的任意服務(wù),~/* 表示禁止目標(biāo)是任意命名空間下的任意服務(wù)。
  • port:監(jiān)聽(tīng)器關(guān)聯(lián)的端口。
  • bind:監(jiān)聽(tīng)器綁定的地址。
  • captureMode:配置流量捕獲模式,可以是 DEFAULT、IPTABLES、NONE 三種模式,默認(rèn)是 DEFAULT,DEFAULT 模式表示使用環(huán)境默認(rèn)的流量捕獲規(guī)則;IPTABLES 模式表示基于 iptables 規(guī)則轉(zhuǎn)發(fā)的流量,NONE 模式表示沒(méi)有流量攔截。
  • ingress:這個(gè)字段用來(lái)配置 sidecar 代理對(duì)應(yīng)工作負(fù)載的入流量控制。該字段下面可以配置如下幾個(gè)參數(shù):
  • port:這是一個(gè)必選的字段,表示監(jiān)聽(tīng)器對(duì)應(yīng)的端口。

  • bind:監(jiān)聽(tīng)器綁定的地址。

  • captureMode:配置流量捕獲模式,與 egress 中的 captureMode 字段一樣。

  • defaultEndpoint:也是必選字段,表示流量的轉(zhuǎn)發(fā)目標(biāo)地址,比如 127.0.0.1:port 或者 0.0.0.0:port。

  • outboundTrafficPolicy:這個(gè)字段用來(lái)配置 sidecar 代理對(duì)應(yīng)工作負(fù)載的出流量控制,該字段有兩種訪問(wèn)配置:

  • ALLOW_ANY:表示允許訪問(wèn)任意服務(wù),sidecar 代理在攔截到這個(gè)出流量后,會(huì)直接透?jìng)鳌?/p>

  • REGISTRY_ONLY:sidecar 代理會(huì)攔截所有的出口流量,只允許服務(wù)網(wǎng)格內(nèi)部服務(wù)可以被訪問(wèn),對(duì)于外部服務(wù)需要使用 ServiceEntry 注冊(cè)才可以被訪問(wèn)。

Sidecar 對(duì)象可以定義在根命名空間 istio-system 下,這樣就會(huì)應(yīng)用到所有命名空間下的工作負(fù)載上,比如我們可以創(chuàng)建一個(gè)如下所示的 Sidecar 對(duì)象:

# global-sidecar.yaml
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: default
  namespace: istio-system
spec:
  egress:
    - hosts:
        - "./*"

上面的這個(gè) Sidecar 對(duì)象定義在 istio-system 命名空間下,這樣就會(huì)應(yīng)用到所有命名空間下的工作負(fù)載上,其中 egress 字段中的 hosts 字段指定了可以訪問(wèn)的服務(wù),這里我們指定了 "./*",表示限制整個(gè)服務(wù)網(wǎng)格中的服務(wù)只能訪問(wèn)本命名空間的服務(wù)。在實(shí)踐中我們推薦使用這種方式在全局范圍定義一個(gè)統(tǒng)一的 Sidecar 規(guī)則,然后在特定的命名空間下再定義一個(gè) Sidecar 對(duì)象來(lái)覆蓋全局的 Sidecar 規(guī)則。

比如我們可以在 default 命名空間下創(chuàng)建一個(gè)如下所示的 Sidecar 對(duì)象來(lái)覆蓋上面全局的這個(gè)對(duì)象:

# default-sidecar.yaml
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: default
  namespace: default
spec:
  egress:
    - hosts:
        - "foo/*"

這個(gè)對(duì)象就允許 default 命名空間的服務(wù)可以訪問(wèn) foo 命名空間的服務(wù)。

同樣我們還可以使用 workloadSelector 字段來(lái)指定 sidecar 代理所屬的工作負(fù)載,比如我們可以創(chuàng)建一個(gè)如下所示的 Sidecar 對(duì)象:

# default-sidecar.yaml
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: default
  namespace: default
spec:
  workloadSelector:
    labels:
      app: bar
  egress:
    - hosts:
        - "bar/foo-api"

上面的這個(gè)對(duì)象只會(huì)應(yīng)用到 app: bar 標(biāo)簽的工作負(fù)載上,并覆蓋以上命名空間級(jí)別的規(guī)則,使得 default 命名空間下面的 app: bar 標(biāo)簽的工作負(fù)載只能訪問(wèn) bar 命名空間下面的 foo-api 服務(wù)。

接下來(lái)我們使用 sleep 和 httpbin 應(yīng)用來(lái)進(jìn)行測(cè)試說(shuō)明,將這兩個(gè)應(yīng)用部署到 default 和 other 兩個(gè)命名空間下面:

kubectl create ns other
kubectl label ns other istio-injectinotallow=enabled
kubectl apply -f samples/sleep/sleep.yaml -n default
kubectl apply -f samples/sleep/sleep.yaml -n other
kubectl apply -f samples/httpbin/httpbin.yaml -n default
kubectl apply -f samples/httpbin/httpbin.yaml -n other

默認(rèn)情況下,注入了 Istio 的工作負(fù)載會(huì)進(jìn)行全網(wǎng)格的傳播,假設(shè) default 和 other 兩個(gè)不相干的命名空間,other 中有大量的服務(wù),而 default 中只有幾個(gè),因?yàn)槁酚蓚鞑サ年P(guān)系,default 命名空間中的工作負(fù)載,其 sidecar 代理中也會(huì)帶上 other 命名空間中的路由信息。例如:

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

可以看到,在 default 命名空間中的 Pod,保存了其它命名空間中的路由信息。這不管是對(duì)內(nèi)存消耗還是路由控制來(lái)說(shuō),都會(huì)造成一定浪費(fèi),這個(gè)時(shí)候我們就可以定義一個(gè) Sidecar 資源,限制 sleep 服務(wù)只訪問(wèn)同一命名空間的其他服務(wù),如下所示:

# sleep-sidecar.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sleep
spec:
  workloadSelector:
    labels:
      app: sleep
  egress:
    - hosts:
        - "default/*"

直接應(yīng)用上面的資源對(duì)象即可:

$ kubectl apply -f sleep-sidecar.yaml
$ kubectl get sidecar
NAME    AGE
sleep   16s

這個(gè)時(shí)候可以看到在 sleep 應(yīng)用中只剩下了本命名空間之內(nèi)的服務(wù)了:

$ istioctl proxy-config clusters sleep-9454cc476-jfw97
SERVICE FQDN                              PORT     SUBSET          DIRECTION     TYPE             DESTINATION RULE
                                          80       -               inbound       ORIGINAL_DST
BlackHoleCluster                          -        -               -             STATIC
InboundPassthroughClusterIpv4             -        -               -             ORIGINAL_DST
PassthroughCluster                        -        -               -             ORIGINAL_DST
agent                                     -        -               -             STATIC
httpbin.default.svc.cluster.local         8000     -               outbound      EDS
kubernetes.default.svc.cluster.local      443      -               outbound      EDS
prometheus_stats                          -        -               -             STATIC
sds-grpc                                  -        -               -             STATIC
sleep.default.svc.cluster.local           80       -               outbound      EDS
xds-grpc                                  -        -               -             STATIC
zipkin                                    -        -               -             STRICT_DNS

現(xiàn)在我們可以在 sleep 應(yīng)用中去訪問(wèn)下 httpbin 的應(yīng)用:

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

可以看到 default 命名空間下面的應(yīng)用可以正常訪問(wèn),那么對(duì)于 other 命名空間下面的服務(wù)正常就不能訪問(wèn)了。

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

可以看到 default 命名空間下面的應(yīng)用無(wú)法訪問(wèn) other 命名空間下面的服務(wù)了。

Istio 默認(rèn)情況下,服務(wù)網(wǎng)格內(nèi)部的所有數(shù)據(jù)面代理都通過(guò) xDS 從控制面獲取全量的配置,這種方式在數(shù)據(jù)面代理數(shù)量較少的情況下是沒(méi)有問(wèn)題的,但是當(dāng)數(shù)據(jù)面代理數(shù)量較多的大規(guī)模服務(wù)網(wǎng)格的場(chǎng)景下,這種方式顯然會(huì)造成性能問(wèn)題,全量的配置會(huì)引起數(shù)據(jù)面代理的內(nèi)存暴漲,所以 Sidecar 對(duì)象是非常有必要的,通過(guò) Sidecar 對(duì)象只維護(hù)少量依賴服務(wù)的配置,可以大大減少無(wú)用的內(nèi)存消耗,所以在生產(chǎn)環(huán)境中我們推薦大家使用 Sidecar 對(duì)象來(lái)控制數(shù)據(jù)面代理的配置。

責(zé)任編輯:姜華 來(lái)源: k8s技術(shù)圈
相關(guān)推薦

2025-03-27 05:25:00

2017-12-14 14:32:30

.Net內(nèi)存代碼

2011-05-11 17:26:17

Minify

2022-09-15 10:44:42

SidecarIstioeBPFizer

2022-06-06 22:36:55

渲染性能CSS

2017-01-19 15:27:24

Android性能優(yōu)化Lint

2016-08-12 10:23:28

javascriptChrome前端

2023-10-07 08:59:02

2023-11-20 07:19:33

2025-06-03 00:00:06

性能優(yōu)化性能指標(biāo)響應(yīng)時(shí)間

2014-12-10 10:12:02

Web

2022-07-13 13:34:30

微服務(wù)邊車SideCar

2017-08-14 09:05:50

SIOC存儲(chǔ)負(fù)載

2009-04-16 17:44:46

性能優(yōu)化擴(kuò)展高性能

2019-03-22 09:50:52

WebJavaScript前端

2024-11-21 08:00:00

向量搜索人工智能

2024-01-01 21:57:41

kubernetesCRDOperator

2013-06-09 15:31:35

jQueryjQuery優(yōu)化性能優(yōu)化

2017-08-08 09:45:43

Python性能優(yōu)化

2009-06-16 16:10:59

Hibernate性能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)