<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          k8s-服務(wù)網(wǎng)格實(shí)戰(zhàn)-入門Istio

          共 5824字,需瀏覽 12分鐘

           ·

          2024-04-10 17:33

          背景

          終于進(jìn)入大家都比較感興趣的服務(wù)網(wǎng)格系列了,在前面已經(jīng)講解了:

          • 如何部署應(yīng)用到 kubernetes
          • 服務(wù)之間如何調(diào)用
          • 如何通過域名訪問我們的服務(wù)
          • 如何使用 kubernetes 自帶的配置 ConfigMap

          基本上已經(jīng)夠我們開發(fā)一般規(guī)模的 web 應(yīng)用了;但在企業(yè)中往往有著復(fù)雜的應(yīng)用調(diào)用關(guān)系,應(yīng)用與應(yīng)用之間的請求也需要進(jìn)行管理。比如常見的限流、降級、trace、監(jiān)控、負(fù)載均衡等功能。

          在我們使用 kubernetes 之前往往都是由微服務(wù)框架來解決這些問題,比如 Dubbo、SpringCloud 都有對應(yīng)的功能。

          但當(dāng)我們上了 kubernetes 之后這些事情就應(yīng)該交給一個專門的云原生組件來解決,也就是本次會講到的 Istio,它是目前使用最為廣泛的服務(wù)網(wǎng)格解決方案。

          76701ddb8d2a1f6473374478be06171e.webp官方對于 Istio 的解釋比較簡潔,落到具體的功能點(diǎn)也就是剛才提到的:

          • 限流降級
          • 路由轉(zhuǎn)發(fā)、負(fù)載均衡
          • 入口網(wǎng)關(guān)、TLS安全認(rèn)證
          • 灰度發(fā)布等
          b32992953ca1ca15c28fdeb870f80cd2.webpimage.png

          再結(jié)合官方的架構(gòu)圖可知:Istio 分為控制面 control plane 和數(shù)據(jù)面 data plane。

          控制面可以理解為 Istio 自身的管理功能:

          • 比如服務(wù)注冊發(fā)現(xiàn)
          • 管理配置數(shù)據(jù)面所需要的網(wǎng)絡(luò)規(guī)則等

          而數(shù)據(jù)面可以簡單的把他理解為由 Envoy 代理的我們的業(yè)務(wù)應(yīng)用,我們應(yīng)用中所有的流量進(jìn)出都會經(jīng)過 Envoy 代理。

          所以它可以實(shí)現(xiàn)負(fù)載均衡、熔斷保護(hù)、認(rèn)證授權(quán)等功能。

          安裝

          首先安裝 Istio 命令行工具

          這里的前提是有一個 kubernetes 運(yùn)行環(huán)境

          Linux 使用:

                
                curl -L https://istio.io/downloadIstio | sh -

          Mac 可以使用 brew:

                
                brew install istioctl

          其他環(huán)境可以下載 Istio 后配置環(huán)境變量:

                
                export PATH=$PWD/bin:$PATH

          之后我們可以使用 install 命令安裝控制面。

          這里默認(rèn)使用的是 kubectl 所配置的 kubernetes 集群

                
                istioctl install --set profile=demo -y

          53b49f47baaf8e3950f701e6a3be4a04.webp這個的 profile 還有以下不同的值,為了演示我們使用 demo 即可。513cdc49c641cd3a90d0940ea1a8c5bb.webp

          使用
                
                # 開啟 default 命名空間自動注入
          $ k label namespace default istio-injection=enabled

          $ k describe ns default
          Name:         default
          Labels:       istio-injection=enabled
                        kubernetes.io/metadata.name=default
          Annotations:  <none>
          Status:       Active
          No resource quota.
          No LimitRange resource.

          之后我們?yōu)?namespace 打上 label,使得 Istio 控制面知道哪個 namespace 下的 Pod 會自動注入 sidecar。

          這里我們?yōu)?default 這個命名空間打開自動注入 sidecar,然后在這里部署我們之前使用到的 deployment-istio.yaml

                
                $ k apply -f deployment/deployment-istio.yaml

          $ k get pod
          NAME                                  READY   STATUS    RESTARTS
          k8s-combat-service-5bfd78856f-8zjjf   2/2     Running   0          
          k8s-combat-service-5bfd78856f-mblqd   2/2     Running   0          
          k8s-combat-service-5bfd78856f-wlc8z   2/2     Running   0       

          此時會看到每個Pod 有兩個 container(其中一個就是 istio-proxy sidecar),也就是之前做 gRPC 負(fù)載均衡測試時的代碼。

          4387050662844c595105f4b680860c7d.webp還是進(jìn)行負(fù)載均衡測試,效果是一樣的,說明 Istio 起作用了。

          此時我們再觀察 sidecar 的日志時,會看到剛才我們所發(fā)出和接受到的流量:

                
                $ k logs -f k8s-combat-service-5bfd78856f-wlc8z -c istio-proxy

          [2023-10-31T14:52:14.279Z] "POST /helloworld.Greeter/SayHello HTTP/2" 200 - via_upstream - "-" 12 61 14 9 "-" "grpc-go/1.58.3" "6d293d32-af96-9f87-a8e4-6665632f7236" "k8s-combat-service:50051" "172.17.0.9:50051" inbound|50051|| 127.0.0.6:42051 172.17.0.9:50051 172.17.0.9:40804 outbound_.50051_._.k8s-combat-service.default.svc.cluster.local default
          [2023-10-31T14:52:14.246Z] "POST /helloworld.Greeter/SayHello HTTP/2" 200 - via_upstream - "-" 12 61 58 39 "-" "grpc-go/1.58.3" "6d293d32-af96-9f87-a8e4-6665632f7236" "k8s-combat-service:50051" "172.17.0.9:50051" outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:40804 10.101.204.13:50051 172.17.0.9:54012 - default
          [2023-10-31T14:52:15.659Z] "POST /helloworld.Greeter/SayHello HTTP/2" 200 - via_upstream - "-" 12 61 35 34 "-" "grpc-go/1.58.3" "ed8ab4f2-384d-98da-81b7-d4466eaf0207" "k8s-combat-service:50051" "172.17.0.10:50051" outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:39800 10.101.204.13:50051 172.17.0.9:54012 - default
          [2023-10-31T14:52:16.524Z] "POST /helloworld.Greeter/SayHello HTTP/2" 200 - via_upstream - "-" 12 61 28 26 "-" "grpc-go/1.58.3" "67a22028-dfb3-92ca-aa23-573660b30dd4" "k8s-combat-service:50051" "172.17.0.8:50051" outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:44580 10.101.204.13:50051 172.17.0.9:54012 - default
          [2023-10-31T14:52:16.680Z] "POST /helloworld.Greeter/SayHello HTTP/2" 200 - via_upstream - "-" 12 61 2 2 "-" "grpc-go/1.58.3" "b4761d9f-7e4c-9f2c-b06f-64a028faa5bc" "k8s-combat-service:50051" "172.17.0.10:50051" outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:39800 10.101.204.13:50051 172.17.0.9:54012 - default
          總結(jié)

          本期的內(nèi)容比較簡單,主要和安裝配置相關(guān),下一期更新如何配置內(nèi)部服務(wù)調(diào)用的超時、限流等功能。

          其實(shí)目前大部分操作都是偏運(yùn)維的,即便是后續(xù)的超時配置等功能都只是編寫 yaml 資源。

          但在生產(chǎn)使用時,我們會給開發(fā)者提供一個管理臺的可視化頁面,可供他們自己靈活配置這些原本需要在 yaml 中配置的功能。

          90524558e48667bcaa867af182c9f2aa.webp其實(shí)各大云平臺廠商都有提供類似的能力,比如阿里云的 EDAS 等。

          本文的所有源碼在這里可以訪問:https://github.com/crossoverJie/k8s-combat



          往期推薦



          如何優(yōu)雅重啟 kubernetes 的 Pod

          在 kubernetes 環(huán)境中實(shí)現(xiàn) gRPC 負(fù)載均衡

          五分鐘k8s入門到實(shí)戰(zhàn)-應(yīng)用配置

          五分鐘k8s實(shí)戰(zhàn)-使用Ingress

          k8s入門到實(shí)戰(zhàn)--跨服務(wù)調(diào)用

           

          6bef8e295e35abb369d41ca484d28a78.webp

          點(diǎn)分享

          9edb87891a9b1a9eff706d2816de660c.webp

          點(diǎn)收藏

          8629e83a3538c54c8d86bbce275bff1d.webp

          點(diǎn)點(diǎn)贊

          452606191361c2648b4a085088ea1889.webp

          點(diǎn)在看

           


          瀏覽 34
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一a毛一a毛A免费看图 | 日韩操逼视频 | 日本无码一区二区三区 | 欧美性爱乱 | 草比免费视频 |