您好,登錄后才能下訂單哦!
Deployment 名稱(chēng) | Container和Port | Container和Port |
---|---|---|
istio-pilot | pilot: 8080,15010 | proxyv2: 15003,15005,15007 |
istio-galley | galley: 443,9093 | |
istio-egressgateway | proxyv2: 80,443,15090 | |
istio-ingressgateway | proxyv2: 80,443,31400,15011,8060,853,15030,15031,15090 | |
grafana | grafana: 3000 | |
istio-policy | mixer: 9093,42422 | proxyv2: 9091,15004,15090 |
istio-telemetry | mixer: 9093,42422 | proxyv2: 9091,15004,15090 |
prometheus | prometheus: 9090 | |
istio-citadel | citadel: 8086 | |
istio-sidecar-injector | sidecar-injector | |
istio-tracing | jaegertracing/all-in-one: 9411,16686 UDP:5775,6832,6831 | |
istio-ingress | proxyv2: 80,443 |
其中,流量的走向如下圖所示:
說(shuō)明:紅色線(xiàn)表示控制流,黑色線(xiàn)表示數(shù)據(jù)流,藍(lán)色部分為Envoy和pilot相關(guān)組件
istio主要有兩部分組成: 控制面和數(shù)據(jù)面。
Pilot: Istio的核心流量控制組件,主要負(fù)責(zé)流量管理。Pilot管理了所有Envoy的代理實(shí)例(Sidecar),主要有以下功能:
Mixer: 主要是預(yù)檢查和匯報(bào)工作,策略控制,監(jiān)控,和日志收集等。主要工作流程如下:
Citadel: 主要用于證書(shū)管理和身份認(rèn)證。
Sidecar(Envoy): Istio中的數(shù)據(jù)面,負(fù)責(zé)控制對(duì)服務(wù)網(wǎng)格控制的實(shí)際執(zhí)行。
Istio通過(guò)K8s的Admission webhook[9]機(jī)制實(shí)現(xiàn)了sidecar的自動(dòng)注入,Mesh中的每個(gè)微服務(wù)pod會(huì)被加入Envoy相關(guān)的容器。
除了微服務(wù)自身的容器外,istio還在Pod中注入proxy_init
和proxyv2
兩個(gè)容器。其中proxyv2容器中運(yùn)行的兩個(gè)進(jìn)程是數(shù)據(jù)面的核心。
proxy_init是一個(gè)initContainer, 主要用于在啟動(dòng)Pod前做一些初始化的工作,只有當(dāng)InitContainer執(zhí)行成功之后,才會(huì)啟動(dòng)Pod中的其他container。
可以通過(guò)docker inspect
命令,來(lái)獲取此容器鏡像的元數(shù)據(jù):
...
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) COPY file:1e5fc95e10f8888f4cae33f7e0ea42b5aff9d18d36280ae288a0fee948dc18e1 in / "
],
"ArgsEscaped": true,
"Image": "sha256:e261e1418e2ed94d1de1742d80997cc58f96aa3c4bfc56cd50e7f2848bf5bcf6",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/usr/local/bin/istio-iptables.sh"
],
...
從上面的命令行輸出可以看到,Proxy_init中執(zhí)行的命令是istio-iptables.sh腳本,腳本具體內(nèi)容可以直接從已存在的容器拷貝出來(lái)進(jìn)行查看:
docker cp cbbaf5413d04:/usr/local/bin/istio-iptables.sh ./
這個(gè)腳本主要設(shè)置了Istio sidecar的iptables端口轉(zhuǎn)發(fā)規(guī)則。
伴隨著業(yè)務(wù)容器長(zhǎng)久運(yùn)行的注入容器是istio-proxy,這個(gè)容器負(fù)責(zé)截取POD中所有流入流出的流量。
通過(guò)如下命令,可以看到在此容器中運(yùn)行的進(jìn)程:
[root@k8s-node-1 ~]# kubectl exec reviews-v3-748456d47b-6jvsp -c istio-proxy -- ps -ef
UID PID PPID C STIME TTY TIME CMD
istio-p+ 1 0 0 02:26 ? 00:00:00 /usr/local/bin/pilot-agent proxy sidecar --configPath /etc/istio/proxy --binaryPath /usr/local/bin/envoy --serviceCluster reviews --drainDuration 45s --parentShutdownDuration 1m0s --discoveryAddress istio-pilot.istio-system:15007 --discoveryRefreshDelay 1s --zipkinAddress zipkin.istio-system:9411 --connectTimeout 10s --proxyAdminPort 15000 --controlPlaneAuthPolicy NONE
istio-p+ 16 1 0 02:26 ? 00:03:37 /usr/local/bin/envoy -c /etc/istio/proxy/envoy-rev0.json --restart-epoch 0 --drain-time-s 45 --parent-shutdown-time-s 60 --service-cluster reviews --service-node sidecar~10.2.53.61~reviews-v3-748456d47b-6jvsp.default~default.svc.cluster.local --max-obj-name-len 189 --allow-unknown-fields -l warn --v2-config-only
istio-p+ 39 0 0 13:07 ? 00:00:00 ps -ef
這個(gè)容器中主要運(yùn)行了兩個(gè)進(jìn)程:
通過(guò)對(duì)envoy-rev0.json文件進(jìn)行分析,我們可以發(fā)現(xiàn)其主要包含了如下幾個(gè)部分:
curl http://127.0.0.1:15000/help
獲取當(dāng)前POD的接口和狀態(tài)信息登錄istio-proxy查看監(jiān)聽(tīng)的端口,其中80端口為業(yè)務(wù)容器提供服務(wù)的端口:
$ netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:15001 0.0.0.0:* LISTEN 13/envoy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15090 0.0.0.0:* LISTEN 13/envoy
tcp 0 0 127.0.0.1:15000 0.0.0.0:* LISTEN 13/envoy
tcp6 0 0 :::15020 :::* LISTEN 1/pilot-agent
流程圖示:
Envoy中實(shí)際生效的配置是由初始化配置文件中的靜態(tài)配置和從Pilot獲取的動(dòng)態(tài)配置一起組成的。因此只對(duì)envoy-rev0 .json進(jìn)行分析并不能看到Mesh中流量管理的全貌。那么有沒(méi)有辦法可以看到Envoy中實(shí)際生效的完整配置呢?答案是可以的,我們可以通過(guò)Envoy的管理接口來(lái)獲取Envoy的完整配置:
kubectl -n yak exec yak-files-7d48cd48f-tf75f -c istio-proxy curl http://127.0.0.1:15000/config_dump > config_dump
查看此文件的結(jié)構(gòu):
{
"configs":[
{
"@type":"type.googleapis.com/envoy.admin.v2alpha.BootstrapConfigDump",
"bootstrap":Object{...},
"last_updated":"2019-05-08T08:07:28.221Z"
},
{
"@type":"type.googleapis.com/envoy.admin.v2alpha.ClustersConfigDump",
"version_info":"2019-05-09T08:36:01Z/4",
"static_clusters":Array[3],
"dynamic_active_clusters":Array[96]
},
{
"@type":"type.googleapis.com/envoy.admin.v2alpha.ListenersConfigDump",
"version_info":"2019-05-09T08:36:01Z/4",
"static_listeners":Array[1],
"dynamic_active_listeners":Array[57]
},
{
"@type":"type.googleapis.com/envoy.admin.v2alpha.RoutesConfigDump",
"static_route_configs":Array[3],
"dynamic_route_configs":Array[17]
}
]
}
配置中主要包含了如下幾部分:
官方bookinfo服務(wù)調(diào)用示意圖:
參考鏈接:https://zhaohuabing.com/post/2018-09-25-istio-traffic-management-impl-intro/
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。