CNI插件
更新時間 2025-10-11 09:59:32
最近更新時間: 2025-10-11 09:59:32
分享文章
本章節介紹CNI插件的使用
背景
sidecar模式下,服務網格默認通過給業務pod注入一個istio-init容器配置iptabels規則,實現業務無感的流量攔截,但是這種配置方式需要較高的權限(NET_ADMIN 和 NET_RAW),在對安全較為敏感的場景,這種配置方式可能帶來安全風險。通過CNI插件方式,不需要用戶提權的情況完成和istio-init相同的能力,實現容器流量攔截配置功能。CNI插件以DaemonSet方式部署在集群中,創建pod時完成容器網絡配置。
操作
進入服務網格控制臺 -> sidecar管理 -> 網格CNI插件 菜單,您可以選擇對應的istio版本和相關配置,開啟或關閉CNI插件,配置說明如下
| 配置 | 說明 |
|---|---|
| 版本 | 升級過程中可能同時存在多個版本,您可以選擇一個版本開啟CNI插件 |
| 排除的命名空間 | 排除的命名空間下的pod不會被CNI插件處理,一般配置為一些不希望注入網格sidecar的命名空間。請勿將需要注入sidecar的命名空間添加到CNI排除的命名空間列表中,可能導致pod啟動失敗。 |
使用CNI插件實現sidecar流量攔截配置
進入服務網格控制臺 -> sidecar管理 -> 網格CNI插件 菜單,開啟網格CNI插件,完成后可以看到云容器引擎中已經部署了網格CNI
部署應用服務,確保pod所在的命名空間及pod的標簽滿足sidecar注入規則,且pod所在的命名空間不在網格CNI插件的排除命名空間里;部署完成后可以看到pod注入了sidecar
# kubectl get po -n demo NAME READY STATUS RESTARTS AGE httpbin-6878558fdc-4c9gx 2/2 Running 0 38s # kubectl get po -n demo -o yaml ... initContainers: - args: - istio-iptables - -p - "15001" - -z - "15006" - -u - "1337" - -m - REDIRECT - -i - '*' - -x - "" - -b - '*' - -d - 15090,15021,15020 - -o - 18181,18282 - --log_output_level=default:info - --run-validation - --skip-rule-apply image: registry-vpc-crs-huadong1.cnsp-internal.daliqc.cn/library/proxyv2:1.20.0-v1.7 imagePullPolicy: IfNotPresent name: istio-validation ...
可以看到pod中注入的initContainers為istio-validation容器,發起請求再查看sidecar日志可以看到流量被攔截到了sidecar:
# kubectl exec -it -n istio-system istio-eastwestgateway-79567ccc4-w4hg9 -- curl httpbin.demo.svc.cluster.local:8000/headers -sv
* Trying 10.96.243.161:8000...
* Connected to httpbin.demo.svc.cluster.local (10.96.243.161) port 8000 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.demo.svc.cluster.local:8000
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: istio-envoy
< date: Tue, 11 Feb 2025 09:08:05 GMT
< content-type: application/json
< content-length: 203
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
< x-request-id: e6700048-aa01-44d2-806b-f8e5355c50f7
< x-envoy-decorator-operation: httpbin.demo.svc.cluster.local:8000/*
<
{"headers":{"Accept":"*/*","Host":"httpbin.demo.svc.cluster.local:8000","User-Agent":"curl/7.81.0","X-B3-Sampled":"0","X-B3-Spanid":"abfdf79e32accb74","X-B3-Traceid":"3051a310747c75f7abfdf79e32accb74"}}
* Connection #0 to host httpbin.demo.svc.cluster.local left intact
# kubectl logs -n demo httpbin-6878558fdc-4c9gx -c istio-proxy
...
[2025-02-11T09:07:59.411Z] "GET /headers HTTP/1.1" 200 - via_upstream - "-" 0 203 3 3 "-" "curl/7.81.0" "9dfa83ca-6b06-47b7-ade6-22f136614071" "httpbin.demo.svc.cluster.local:8000" "172.16.0.19:80" inbound|80|| 127.0.0.6:55875 172.16.0.19:80 172.16.0.82:59942 - default
[2025-02-11T09:08:05.777Z] "GET /headers HTTP/1.1" 200 - via_upstream - "-" 0 203 1 1 "-" "curl/7.81.0" "e6700048-aa01-44d2-806b-f8e5355c50f7" "httpbin.demo.svc.cluster.local:8000" "172.16.0.19:80" inbound|80|| 127.0.0.6:45489 172.16.0.19:80 172.16.0.82:42988 - default
...CNI插件升級說明
升級過程中您可以選擇一個版本安裝CNI插件,在升級完成之后將CNI插件也切換到新版本。