Istio 如何無(wú)停機(jī)平滑升級(jí) (1.7 跨版本升級(jí) 1.11)

我是 LEE,老李随闺,一個(gè)在 IT 行業(yè)摸爬滾打 16 年的技術(shù)老兵虾标。

事件背景

忙完了公司的雙 11 項(xiàng)目后,整個(gè)公司的大項(xiàng)目基本都結(jié)束了辣垒。整個(gè)生產(chǎn)系統(tǒng)進(jìn)入了一年一度的維護(hù)和升級(jí)階段望侈,那么主要底層系統(tǒng)也進(jìn)入了版本更新和維護(hù)的階段。寫一篇文章的目的是解決前幾個(gè)星期我們要對(duì)承載租戶流量的服務(wù)網(wǎng)格 Istio 做整體升級(jí)勋桶,但是翻閱了整個(gè)網(wǎng)絡(luò)資料后脱衙,發(fā)現(xiàn)沒(méi)有一篇完整的能夠提供 Istio 平滑升級(jí)的文章以及可行的操作手冊(cè)的問(wèn)題。所以決定根據(jù)自己在實(shí)際工作中碰到的問(wèn)題以及實(shí)際操作整理一篇文章例驹,希望能夠?qū)ζ渌谑褂?Istio 的小伙伴提供一種“無(wú)損平滑”升級(jí)的技術(shù)參考痴突。

升級(jí)要求

  1. 租戶應(yīng)用與服務(wù)不能中斷抖苦。
  2. 租戶在升級(jí)期間能夠正常使用原有系統(tǒng),對(duì)升級(jí)無(wú)感。
  3. 升級(jí)過(guò)程支持平滑回退斯碌,有完善的過(guò)濾流程和時(shí)間。
  4. 方案可持續(xù),對(duì) Istio 系統(tǒng)沒(méi)有侵入,利用社區(qū)內(nèi)資源和資料松蒜。
  5. 操作可規(guī)范和流程化,方便后續(xù)人參考和使用已旧。

有了上面的升級(jí)要求秸苗,那么我們也就有尋求“無(wú)損平滑”解決方案的需求,但是事實(shí)總是殘酷的运褪,沒(méi)有找到復(fù)合我們需要的方案惊楼,哪怕官方文檔提供的升級(jí)方案都是有損的。我就很擔(dān)心如果按照現(xiàn)在網(wǎng)絡(luò)提供的資料和信息制作升級(jí)方案和操作 SOP秸讹,滿足不了升級(jí)要求檀咙。怎么辦?看來(lái)不得不有一次技術(shù)攻堅(jiān)璃诀、方案設(shè)計(jì)弧可、可行性驗(yàn)證了。我想要平滑升級(jí) Istio劣欢,那么就要回到源頭棕诵,研究 Istio 的結(jié)構(gòu),制定真正可行的方案凿将。

廢話不多說(shuō)校套,我們一起進(jìn)入“技術(shù)探索”環(huán)節(jié)。

技術(shù)探索

既然要制定 Istio “無(wú)損平滑”升級(jí)方案牧抵,就要知道為什么 Istio 升級(jí)會(huì)有損笛匙。有一種頭痛醫(yī)頭,腳痛醫(yī)腳的感覺(jué)犀变,這個(gè)是最有效的辦法妹孙,不妨我們耐心繼續(xù)往下看。

我們先看下 Istio 的架構(gòu)簡(jiǎn)圖:

Istio 架構(gòu)圖

實(shí)際 Pod 的 sidecar 和 IngressGateway 底層都是 Envoy弛作,都是通過(guò) Istiod 分發(fā)的 Dynamic config涕蜂,也就是這些 envoy 都是注冊(cè)在 Istiod 上的,由 Istiod 統(tǒng)一管理映琳。

補(bǔ)充說(shuō)明:Istio sidecar 注入是因?yàn)?MutatingWebhookConfigurations 的配置机隙。在擁有 label 為 istio-injection=enabled 的 namespace 中創(chuàng)建 pod 會(huì)自動(dòng)注入 pod 啟動(dòng)中。

我們做一個(gè)假設(shè)萨西,現(xiàn)在生產(chǎn)的 Istio 版本是 1.7有鹿,然后再把 Istio 版本升級(jí)到了 1.11 這個(gè)版本。 Istiod 版本發(fā)生了變化谎脯,Istiod 版本成為了 1.11葱跋,而業(yè)務(wù) Pod 的 sidecar 版本還是 1.7,怎么辦?

小伙伴第一反應(yīng)就是重啟 pod娱俺,讓業(yè)務(wù) Pod 的 sidecar 重新注冊(cè)到 1.11 上稍味,看上去是那么回事,但是別忘了荠卷,你重啟了業(yè)務(wù) Pod模庐,租戶的請(qǐng)求此時(shí)因?yàn)橹貑?huì)出現(xiàn)中斷或者服務(wù)不可用的情況。如果我不重啟業(yè)務(wù) Pod油宜,就讓 1.7 的 Pod sidecar 連接 1.11 的 Istiod 不就好了掂碱,事實(shí)真的是你想的嗎? No,No,No,太天真慎冤。 Pod sidecar 會(huì)因?yàn)榘姹静患嫒萏墼铮瑏G失配置,導(dǎo)致 Pod 因?yàn)榻】当O(jiān)測(cè)失敗而重啟蚁堤。

Istio-agent 配置不兼容

由于 Istio sidecar 的配置丟失醉者。如果你的 Istio-agent sidecar 無(wú)法與 Istiod 通信,或與發(fā)送的配置不兼容违寿,你的工作負(fù)載將無(wú)法加入網(wǎng)格或與網(wǎng)格通信湃交。這甚至?xí)绊懍F(xiàn)有的工作負(fù)載熟空,導(dǎo)致你可能會(huì)嘗試訪問(wèn)不再存在的工作負(fù)載藤巢,新的工作負(fù)載也將無(wú)法加入。

TIPS: 由于這種類型的中斷息罗,建議 istio-agents 匹配并保留與控制平面 (Istiod) 相同的版本掂咒。在升級(jí)過(guò)程中,現(xiàn)有的控制平面部署保持原位而不是直接升級(jí)迈喉。

如果有小伙伴想探索究竟绍刮,可以參閱我之前公開(kāi)的資料 《Istio Pilot 結(jié)構(gòu)解析 PPT (已脫敏)》

既然有直接升級(jí)不行,而且會(huì)斷流挨摸,有沒(méi)有其他的解決方案呢孩革?
有,灰度升級(jí)得运。官方文檔:https://istio.io/latest/docs/setup/upgrade/canary/

但是這個(gè)就是真的我們想要的嗎膝蜈?不。在官方文檔中有這么一步操作:

After the namespace updates, you need to restart the pods to trigger re-injection. One way to do this is using:

$ kubectl rollout restart deployment -n test-ns

看到這里熔掺,很多人跟我一樣饱搏,木了。置逻。推沸。 重啟 pod ? 真實(shí)生產(chǎn)環(huán)境,你去重啟生產(chǎn) pod鬓催?就因?yàn)?Istio 軟件升級(jí)肺素? 這個(gè)是平滑升級(jí)方案?技術(shù)委員會(huì)能通過(guò)你的方案宇驾? 這么多問(wèn)號(hào)都擺在面前压怠,那么我們?cè)撛趺醋觯?不著急, 我們一起進(jìn)入“技術(shù)方案”環(huán)節(jié)。

技術(shù)方案

技術(shù)挑戰(zhàn)

  1. 直接升級(jí) Istio 會(huì)導(dǎo)致 Istio-agent sidecar 與 Istiod 不兼容飞苇,最后導(dǎo)致業(yè)務(wù) Pod 重啟菌瘫。
  2. 為了保證 Istio-agent 和 Istiod 之間的兼容性,必須要手動(dòng)重啟業(yè)務(wù) Pod布卡。
  3. 系統(tǒng)需要平滑過(guò)渡和升級(jí)雨让,業(yè)務(wù) Pod 非到不必要,絕對(duì)不能重啟忿等。

其中 1栖忠,2 和 3 點(diǎn)之間是相悖的。

方案猜想

  1. Istio-agent sidecar 與 Istiod 兼容問(wèn)題贸街,可不可以老版本的 Istio-agent sidecar 與 Istiod 連接庵寞,新版本的 Istio-agent sidecar 與 Istiod 連接?
  2. 如果各個(gè)版本的 Istio-agent sidecar 與 Istiod 連接薛匪,如何讓老版本的 sidecar 的業(yè)務(wù) pod 自然過(guò)渡到新版本的 sidecar 上捐川?
  3. 如何保證真正的“無(wú)損平滑”升級(jí)?

解決方式

帶著這么多問(wèn)題和技術(shù)挑戰(zhàn)逸尖,當(dāng)時(shí)確實(shí)真的把我難道了古沥,但是經(jīng)過(guò)差不多的 2 周的左右的方案設(shè)計(jì)以及技術(shù)驗(yàn)證,發(fā)現(xiàn)是完全可以做到真正的“無(wú)損平滑”升級(jí)的娇跟。那么在這里我就分享下當(dāng)時(shí)我的思考方式和定位方案的過(guò)程岩齿。

兼容問(wèn)題

這個(gè)問(wèn)題好辦,創(chuàng)建兩個(gè)獨(dú)立的 Istio 系統(tǒng)在一個(gè) k8s 中苞俘,只需要在 istioctl 新安裝的 Istio 加入一個(gè)參數(shù) --set revision=xxx盹沈。 istioctl 安裝時(shí)候就不會(huì)覆蓋原有的 Istio 版本,而是啟用一個(gè)全新的控制面和部分?jǐn)?shù)據(jù)面(為什么是部分吃谣,后面會(huì)看到)乞封。這樣我們就很好的做到了老版本的 Istio-agent sidecar 與 Istiod 連接,新版本的 Istio-agent sidecar 與 Istiod 連接基协。

過(guò)渡問(wèn)題

首先我們不能手動(dòng)重啟正在運(yùn)行的業(yè)務(wù) Pod歌亲,但是不代表業(yè)務(wù) Pod 不會(huì)迭代和發(fā)版,只要他們重新發(fā)版澜驮,Pod 自然就完成了重啟陷揪。只要經(jīng)過(guò)一段足夠長(zhǎng)的時(shí)間就能讓使用老版本的 sidecar 的業(yè)務(wù) pod 自然過(guò)渡到新版本的 sidecar 上。

說(shuō)到這里,有小伙伴覺(jué)得還是沒(méi)有說(shuō)到重點(diǎn)悍缠,那么我覺(jué)得有必要來(lái)看看 MutatingWebhookConfigurations 的配置卦绣。

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
    annotations:
    creationTimestamp: "2022-11-30T10:41:51Z"
    generation: 5
    labels:
        app: sidecar-injector
        install.operator.istio.io/owning-resource: installed-state
        install.operator.istio.io/owning-resource-namespace: istio-system
        istio.io/rev: default
        operator.istio.io/component: Pilot
        operator.istio.io/managed: Reconcile
        operator.istio.io/version: 1.7.8
        release: istio
    name: istio-sidecar-injector
    resourceVersion: "9640"
    selfLink: /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/istio-sidecar-injector
    uid: b66c986a-9ad9-469f-bf14-eea3df74c876
webhooks:
    - admissionReviewVersions:
          - v1beta1
          - v1
      clientConfig:
          caBundle: <Secret>
          service:
              name: istiod ## 這里很重要,就是在 Pod 創(chuàng)建時(shí)候飞蚓,訪問(wèn) k8s istiod service 的 443 端口滤港,然后注冊(cè)自己,然后拉取 sidecar 啟動(dòng)配置
              namespace: istio-system
              path: /inject
              port: 443
      failurePolicy: Fail
      matchPolicy: Exact
      name: sidecar-injector.istio.io
      namespaceSelector:
          matchLabels:
              istio-injection: enabled
      objectSelector: {}
      reinvocationPolicy: Never
      rules:
          - apiGroups:
                - ""
            apiVersions:
                - v1
            operations:
                - CREATE ## 創(chuàng)建動(dòng)作
            resources:
                - pods ## 只關(guān)注 Pod
            scope: "*"
      sideEffects: None
      timeoutSeconds: 30

(★) 在此看到 yaml 文件中 service 字段下有一個(gè) name 為 istiod趴拧,我們只要把這個(gè)值改成新版本的 Istiod 的 service 名稱即可溅漾。 就可以讓重啟的 Pod 使用新版本的 Istio sidecar 啟動(dòng)了。

舉個(gè)栗子:

[root@localhost ops]# kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                         AGE
istio-ingressgateway   LoadBalancer   10.126.118.148   10.111.251.17   15021:30082/TCP,80:30080/TCP                    2d21h
istiod                 ClusterIP      10.126.118.150   <none>         15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP   2d21h
istiod-1-11-8          ClusterIP      10.126.118.241   <none>         15010/TCP,15012/TCP,443/TCP,15014/TCP           2d21h

這里我已經(jīng)安裝了一個(gè) 1.11.8 的新版本的 Istio 與老版本的并行著榴,相互不沖突添履。 修改 MutatingWebhookConfiguration 中配置 sevice name 為 istiod-1-11-8,隨后通過(guò)模擬“發(fā)布”新版本的應(yīng)用脑又,重啟了業(yè)務(wù) Pod暮胧,讓其注冊(cè)到了新版本的 Istio 上。

[root@localhost 1.11.8]# istioctl proxy-status
NAME                                                   CDS        LDS        EDS        RDS        ISTIOD                            VERSION
istio-ingressgateway-59b5b798d4-v9d98.istio-system     SYNCED     SYNCED     SYNCED     SYNCED     istiod-1-11-8-866bf44db-2wbqx     1.11.8
nginx-app-7b88698d6f-brhc4.nginx                       SYNCED     SYNCED     SYNCED     SYNCED     istiod-1-11-8-866bf44db-2wbqx     1.11.8
nginx-app-7b88698d6f-jhwr8.nginx2                      SYNCED     SYNCED     SYNCED     SYNCED     istiod-879f4d9bf-c5xz6            1.7.8

這個(gè)時(shí)候讓我們將目光關(guān)注到 VERSION 這個(gè)字段下问麸,我們發(fā)現(xiàn) nginx-app-7b88698d6f-jhwr8.nginx2 這個(gè) Pod 還是在使用版本 Istio 1.7 并與老的 istiod-879f4d9bf-c5xz6 建立著連接往衷。而 nginx-app-7b88698d6f-brhc4.nginx 這個(gè) Pod 在重啟后就與新版本 Istio 1.11 的 istiod-1-11-8-866bf44db-2wbqx 建立著連接。

到了這里基本上我們實(shí)現(xiàn)了 Istio 平滑升級(jí)严卖,通過(guò)自然迭代的方式重啟 Pod席舍,緩慢遷移到新版本 Istio 上。

平穩(wěn)過(guò)渡

  1. 新版本 Istio 使用灰度安裝升級(jí)的方式部署
  2. 切換 Istio sidecar 注冊(cè)方式 (MutatingWebhookConfiguration)
  3. 等待業(yè)務(wù) Pod 自然迭代重啟妄田,如果長(zhǎng)期沒(méi)有切換重啟的 Pod俺亮,可以組織適當(dāng)?shù)耐C(jī)時(shí)間,完成切換
  4. 卸載老版本 Istio

實(shí)操步驟

安裝新版 Istio

演示的 operator.yaml 文件內(nèi)容

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
    meshConfig:
        accessLogFile: /dev/stdout
        accessLogEncoding: JSON
        outboundTrafficPolicy:
            mode: REGISTRY_ONLY
        defaultConfig:
            holdApplicationUntilProxyStarts: true
    components:
        ingressGateways:
            - name: istio-ingressgateway
              enabled: true
              k8s:
                  service:
                      ports:
                          - port: 15021
                            targetPort: 15021
                            nodePort: 30082
                            name: status-port
                          - port: 80
                            targetPort: 8080
                            nodePort: 30080
                            name: http2
    values:
        global:
            proxy:
                excludeIPRanges: "10.126.118.0/24"
        gateways:
            istio-ingressgateway:
                type: LoadBalancer
                autoscaleMin: 1
                autoscaleMax: 3
                resources:
                    requests:
                        cpu: 1500m
                        memory: 1Gi
                    limits:
                        cpu: "4"
                        memory: 8Gi
    addonComponents:
        prometheus:
            enabled: false

執(zhí)行命令:

# istioctl install -f operator.yaml -s revision=1-11-8

切換注冊(cè)到新版 Istio

切換 MutatingWebhookConfigurations 疟呐,完成 Namespace 中 Pod 啟動(dòng)自動(dòng)注入 Sidecar 到 1.11.8 上,而不是用老的 1.7.8 (其中 istiod-1-11-8 是 k8s service 的名稱东且,可以通過(guò) kubectl get svc 獲得)

執(zhí)行命令:

# kubectl get mutatingwebhookconfigurations -n istio-system istio-sidecar-injector -o json | jq '.webhooks[0].clientConfig.service.name="istiod-1-11-8"' | kubectl replace -f -

(可選)卸載老版本 Istio

直接卸載可能導(dǎo)致默認(rèn)的 mutatingwebhookconfigurations 配置丟失启具,所以這里要注意有備份和恢復(fù)

備份 MutatingWebhookConfigurations 配置

# kubectl get mutatingwebhookconfigurations -n istio-system istio-sidecar-injector -o yaml > /tmp/mutatingwebhookconfigurations.backup.yaml

刪除老版本的 Istio

# istioctl x uninstall -f operator.yaml

恢復(fù) MutatingWebhookConfigurations 配置

# kubectl apply -f /tmp/mutatingwebhookconfigurations.backup.yaml

最終效果

這里通過(guò)模擬集群演示來(lái)展現(xiàn)我們線上遷移整體效果珊泳,方法是一致的鲁冯。

并行狀態(tài)

[root@localhost 1.11.8]# istioctl proxy-status
NAME                                                   CDS        LDS        EDS        RDS        ISTIOD                            VERSION
istio-ingressgateway-59b5b798d4-v9d98.istio-system     SYNCED     SYNCED     SYNCED     SYNCED     istiod-1-11-8-866bf44db-2wbqx     1.11.8
nginx-app-7b88698d6f-brhc4.nginx                       SYNCED     SYNCED     SYNCED     SYNCED     istiod-1-11-8-866bf44db-2wbqx     1.11.8
nginx-app-7b88698d6f-jhwr8.nginx2                      SYNCED     SYNCED     SYNCED     SYNCED     istiod-879f4d9bf-c5xz6            1.7.8

日志檢測(cè)

已經(jīng)遷移到新版本 Istio 的業(yè)務(wù) Pod 日志

[root@localhost 1.11.8]# kubectl logs -n nginx nginx-app-7b88698d6f-brhc4
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/12/02 07:34:59 [notice] 1#1: using the "epoll" event method
2022/12/02 07:34:59 [notice] 1#1: nginx/1.23.2
2022/12/02 07:34:59 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/12/02 07:34:59 [notice] 1#1: OS: Linux 5.18.19-051819-generic
2022/12/02 07:34:59 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 64000:64000
2022/12/02 07:34:59 [notice] 1#1: start worker processes
2022/12/02 07:34:59 [notice] 1#1: start worker process 29
2022/12/02 07:34:59 [notice] 1#1: start worker process 30
2022/12/02 07:34:59 [notice] 1#1: start worker process 31
2022/12/02 07:34:59 [notice] 1#1: start worker process 32
2022/12/02 07:34:59 [notice] 1#1: start worker process 33
2022/12/02 07:34:59 [notice] 1#1: start worker process 34
2022/12/02 07:34:59 [notice] 1#1: start worker process 35
2022/12/02 07:34:59 [notice] 1#1: start worker process 36
127.0.0.6 - - [02/Dec/2022:08:02:46 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:46 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:47 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:48 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:48 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:49 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:49 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:50 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:50 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:51 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:51 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.6 - - [02/Dec/2022:08:02:52 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"

繼續(xù)使用老版本 Istio 的業(yè)務(wù) Pod 日志

[root@localhost 1.11.8]# kubectl logs -n nginx2 nginx-app-7b88698d6f-jhwr8 -c app
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/11/30 11:22:37 [notice] 1#1: using the "epoll" event method
2022/11/30 11:22:37 [notice] 1#1: nginx/1.23.2
2022/11/30 11:22:37 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/11/30 11:22:37 [notice] 1#1: OS: Linux 5.4.185-1.el7.elrepo.x86_64
2022/11/30 11:22:37 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 64000:64000
2022/11/30 11:22:37 [notice] 1#1: start worker processes
2022/11/30 11:22:37 [notice] 1#1: start worker process 28
2022/11/30 11:22:37 [notice] 1#1: start worker process 29
2022/11/30 11:22:37 [notice] 1#1: start worker process 30
2022/11/30 11:22:37 [notice] 1#1: start worker process 31
2022/11/30 11:22:37 [notice] 1#1: start worker process 32
2022/11/30 11:22:37 [notice] 1#1: start worker process 33
2022/11/30 11:22:37 [notice] 1#1: start worker process 34
2022/11/30 11:22:37 [notice] 1#1: start worker process 35
127.0.0.1 - - [03/Dec/2022:08:31:17 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:18 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:19 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:20 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:20 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:21 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:21 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:22 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:23 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"
127.0.0.1 - - [03/Dec/2022:08:31:23 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.54.0" "10.11.251.5"

通過(guò)上面的日志,我們可以確認(rèn)色查,兩套 Istio 已經(jīng)完成并行薯演,而且兩個(gè)應(yīng)用 Pod 請(qǐng)求相應(yīng)正常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秧了,一起剝皮案震驚了整個(gè)濱河市跨扮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖衡创,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帝嗡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡璃氢,警方通過(guò)查閱死者的電腦和手機(jī)哟玷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)一也,“玉大人巢寡,你說(shuō)我怎么就攤上這事∫叮” “怎么了讼渊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尊剔。 經(jīng)常有香客問(wèn)我爪幻,道長(zhǎng),這世上最難降的妖魔是什么须误? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任挨稿,我火速辦了婚禮,結(jié)果婚禮上京痢,老公的妹妹穿的比我還像新娘奶甘。我一直安慰自己,他們只是感情好祭椰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布臭家。 她就那樣靜靜地躺著,像睡著了一般方淤。 火紅的嫁衣襯著肌膚如雪钉赁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天携茂,我揣著相機(jī)與錄音你踩,去河邊找鬼。 笑死讳苦,一個(gè)胖子當(dāng)著我的面吹牛带膜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸳谜,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼膝藕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咐扭?” 一聲冷哼從身側(cè)響起芭挽,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滑废,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后览绿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體策严,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饿敲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妻导。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怀各,死狀恐怖倔韭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓢对,我是刑警寧澤寿酌,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站硕蛹,受9級(jí)特大地震影響醇疼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜法焰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一秧荆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埃仪,春花似錦乙濒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至傻丝,卻和暖如春甘有,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桑滩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工梧疲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人运准。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缭受,于是被迫代替她去往敵國(guó)和親胁澳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容