日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何遷移Istio社區(qū)版本至ASM

您可以將自建Istio版本遷移至阿里云服務(wù)網(wǎng)格ASM,減輕開發(fā)與運維的工作負擔。在遷移過程中支持回滾操作。本文介紹如何遷移Istio社區(qū)版本至ASM。

前提條件

  • 已創(chuàng)建ASM支持的Kubernetes集群,例如ACK、容器服務(wù) Serverless 版集群等。

  • 已通過kubectl工具連接集群。具體操作,請參見通過kubectl工具連接集群

配置流程

遷移自建Istio..png

遷移前檢查

遷移前,您需要參照下表確認Istio社區(qū)版本、證書提供者和證書方式是否符合遷移條件。證書提供者需要您自行確認。下文介紹如何查看Istio社區(qū)版本和證書的安裝方式。

Istio社區(qū)版本(單集群)

證書提供者(PILOT_CERT_PROVIDER)

證書方式

是否支持遷移

建議使用ASM版本

<1.5

istiod

外部root CA或自簽CA

錯

不涉及

≥1.5且≤1.14

istiod

外部root CA或自簽CA

對

ASM最新版本,請參見功能發(fā)布記錄

≥1.15

istiod

外部root CA或自簽CA

對

ASM最新版本,請參見功能發(fā)布記錄

不涉及

certManager或其他

不涉及

錯

不涉及

說明

若您需要遷移ASM還未支持的Istio社區(qū)版本,請加入釘群(釘群號:30421250),聯(lián)系產(chǎn)品技術(shù)專家進行咨詢。

查看Istio社區(qū)版本

執(zhí)行以下命令,查看當前社區(qū)版本。

./istioctl version

示例輸出:

client version: 1.14.3
control plane version: 1.14.3
data plane version: 1.14.3 (6 proxies)

查看安裝Istio社區(qū)版本的證書方式

安裝Istio社區(qū)版本時,有以下兩種常見的證書方式:

  • pluggedCertCA插入的外部root CA。更多信息,請參見Plug in CA Certificates

  • selfSignedCA自簽CA(默認安裝方式)。

您可以執(zhí)行kubectl get secret -n istio-system命令,確認istio-system命名空間下Secret的證書方式。

  • 若輸出結(jié)果存在cacerts Secret,表明采用外部root CA的方式。

  • 若輸出結(jié)果存在istio-ca-secret Secret,表明采用自簽CA的方式。

步驟一:創(chuàng)建ASM企業(yè)版或旗艦版實例

ASM從1.13版本開始支持金絲雀版本升級方式,對應(yīng)部署的Istiod等相關(guān)資源帶有版本后綴,不會和當前Kubernetes集群下已部署的Istio社區(qū)版本沖突。例如,ASM 1.14.3對應(yīng)的Istio的相關(guān)資源都帶有1-14-3后綴。

  1. 通過CreateServiceMesh API創(chuàng)建ASM實例。

    主要配置項說明如下。關(guān)于配置項的更多說明,請參見創(chuàng)建一個服務(wù)網(wǎng)格實例

    配置項

    說明

    RegionId

    需要和Kubernetes集群處于相同地域。

    您可以登錄容器服務(wù)管理控制臺,在集群頁面查看Kubernetes集群所在的地域。

    關(guān)于ASM支持的地域及Region ID的更多信息,請參見開服地域

    VpcId

    Kubernetes集群所在的專有網(wǎng)絡(luò)ID。

    VSwitches

    Kubernetes集群所在的交換機ID。

    CRAggregationEnabled

    默認為關(guān)閉,無需修改。

    ClusterSpec

    遷移場景下僅支持以下兩種服務(wù)網(wǎng)格實例規(guī)格:

    • enterprise:企業(yè)版。

    • ultimate:旗艦版。

    ClusterDomain

    默認為cluster.local,需要和自建Istio所在的Kubernetes集群的ClusterDomain保持一致。

    UseExistingCA

    打開UseExistingCA開關(guān),使用已知的CA證書創(chuàng)建ASM實例。

    ExistingRootCaCert

    ExistingCaCert

    ExistingCaKey

    CertChain

    創(chuàng)建網(wǎng)格時的證書配置:

    • 如果自建Istio為自簽名CA,請按照以下格式填寫相關(guān)參數(shù):

      • ExistingRootCaCert:對應(yīng)istio-system命名空間下的istio-ca-secret的caCert內(nèi)容(Base64編碼格式)。

      • ExistingCaCert:對應(yīng)istio-system命名空間下istio-ca-secret的caCert內(nèi)容(Base64編碼格式)。

      • ExistingCaKey:對應(yīng)istio-system命名空間下istio-ca-secret的caKey內(nèi)容(Base64編碼格式)。

      • CertChain:將ExistingCaCertExistingRootCaCert進行Base64解碼后得到兩個證書,將這兩個證書放在一個文件中,進行Base64編碼后填入即可。

    • 如果自建Istio證書為外部Root CA,直接將對應(yīng)istio-system命名空間下istio-cacerts的secret相應(yīng)內(nèi)容填入即可。

      說明

      創(chuàng)建網(wǎng)格時使用自定義證書之后,需要您自行維護證書的生命周期(參考UpdateMeshFeature API),防止證書過期影響業(yè)務(wù)。

  2. 查看ASM實例是否創(chuàng)建成功。

    1. 登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

    2. 網(wǎng)格管理頁面,查看創(chuàng)建的ASM實例。

      當ASM實例的狀態(tài)運行中,表示創(chuàng)建成功。

步驟二:在新建的ASM實例下添加Kubernetes集群

  1. 執(zhí)行以下命令,修改Kubernetes集群下的mutatingwebhookconfigurations

    修改名稱為istio-sidecar-injector或者istio-revision-tag-default,將istio-injection=enabled對應(yīng)的Webhook修改為istio-injection=enabled-addon

    重要

    請確保mutatingwebhookconfiguration Webhook對istio-injection=enabled標簽生效且為唯一生效值,避免多個生效值同時存在時,注入的Sidecar結(jié)果隨機,導(dǎo)致Pod啟動失敗。

    export KUBECONFIG=<Your ACK Cluster's Kube Config File>
    kubectl get mutatingwebhookconfigurations -A

    示例輸出:

    NAME                                      WEBHOOKS   AGE
    istio-revision-tag-default                4          5d4h
    istio-sidecar-injector                    4          5d4h
  2. 通過AddClusterIntoServiceMesh API添加自建Istio所在的Kubernetes集群。

    打開IgnoreNamespaceCheck開關(guān),開啟忽略istio-system檢查邏輯。關(guān)于配置項的更多說明,請參見AddClusterIntoServiceMesh

    重要

    Kubernetes集群添加到ASM后,請勿在原有Kubernetes集群下變更和新建Istio相關(guān)資源,否則會出現(xiàn)如下示例報錯:

    Error from server: error when creating "samples/bookinfo/networking/destination-rule-all.yaml": admission webhook "asm-validation.istio.io" denied the request:
    當前Kubernetes集群已經(jīng)添加到服務(wù)網(wǎng)格ASM中,在ASM控制臺中創(chuàng)建Istio相關(guān)自定義資源,或使用ASM提供的kubeconfig進行管理。

    Kubernetes集群添加完成后,您可以看到在Kubernetes集群的istio-system命名空間下新增了一些Pod和Configmap,以及相關(guān)mutatingwebhookconfigurations和validatingwebhookconfigurations Webhook。

  3. 同步命名空間和注入配置。

    1. 登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

    2. 網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇網(wǎng)格實例 > 全局命名空間

    3. 全局命名空間頁面,單擊從Kubernetes集群同步自動注入,同步Namespace以及Namespace下的自動注入配置。(default命名空間的自動注入在加入網(wǎng)格之后會默認關(guān)閉,需要手動開啟。)

  4. 任選以下方式,關(guān)閉ASM實例的mTLS。

    ASM實例默認開啟mTLS,如果您自建istio并未開啟mTLS,請關(guān)閉ASM實例的mTLS,防止新老sidecar、網(wǎng)關(guān)之間連接建立失敗。如果您自建istio已經(jīng)開啟mTLS,可以跳過這一步。

    • 方式一:通過控制臺

      1. 在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇網(wǎng)格安全中心 > 對等身份認證,然后在右側(cè)頁面單擊設(shè)置全局雙向

      2. 設(shè)置全局雙向TLS模式頁面,配置mTLS模式(命名空間級)DISABLE - 禁用雙向TLS認證,然后單擊創(chuàng)建

    • 方式二:通過命令行

      1. 使用以下內(nèi)容,創(chuàng)建peer-authentication.yaml

        apiVersion: security.istio.io/v1beta1
        kind: PeerAuthentication
        metadata:
          name: default
          namespace: istio-system
        spec:
          mtls:
            mode: DISABLE
      2. 執(zhí)行以下命令,關(guān)閉mTLS。

        kubectl apply -f peer-authentication.yaml

步驟三:驗證Sidecar注入是否成功

  1. 執(zhí)行以下命令,創(chuàng)建測試命名空間及服務(wù)。

    export KUBECONFIG=<Your ACK Cluster's Kube Config File>
    kubectl create ns foo
    kubectl label ns foo istio.io/rev=1-14-3 # 請將1-14-3替換為ASM的實際版本。
    kubectl create deployment nginx --image=nginx -n foo
  2. 執(zhí)行以下命令,查看Pod是否成功注入對應(yīng)ASM版本的Sidecar。

    kubectl get pods  -n foo -o yaml |grep proxyv2

    預(yù)期輸出:

    image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.14.3.47-ga38201****-aliyun
    image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.14.3.47-ga38201****-aliyun
    image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.14.3.47-ga38201****-aliyun
    imageID: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2@sha256:a2a4d61a8a6183a890c7beac21e6790fc125a0e45ebbc299e728f96755f3****
    image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.14.3.47-ga38201****-aliyun
    imageID: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2@sha256:a2a4d61a8a6183a890c7beac21e6790fc125a0e45ebbc299e728f96755f3****

    預(yù)期輸出表明Pod成功注入對應(yīng)ASM版本的Sidecar。ASM的Sidecar鏡像對應(yīng)在acs/proxyv2 HUB下。

步驟四:遷移Istio配置到ASM

每個ASM實例對應(yīng)一個獨立的Kubernetes集群。ASM控制面涉及的相關(guān)資源配置(VirtualService、DestinationRule等)需要創(chuàng)建在ASM對應(yīng)的集群下。

  1. 執(zhí)行以下命令,從已安裝Istio社區(qū)版本的Kubernetes集群中備份導(dǎo)出已有Istio自定義資源。

    export KUBECONFIG=<Your ACK Cluster's Kube Config File>
    kubectl get VirtualService --all-namespaces -o yaml > all-vs.yaml
    kubectl get DestinationRule --all-namespaces -o yaml > all-dr.yaml
    kubectl get Gateway --all-namespaces -o yaml > all-gw.yaml
    kubectl get ServiceEntry --all-namespaces -o yaml > all-se.yaml
    kubectl get EnvoyFilter --all-namespaces -o yaml > all-ef.yaml
    kubectl get Sidecar --all-namespaces -o yaml > all-sidecar.yaml
    kubectl get WorkloadEntry --all-namespaces -o yaml > all-we.yaml
    kubectl get WorkloadGroup --all-namespaces -o yaml > all-wg.yaml
    kubectl get PeerAuthentication --all-namespaces -o yaml > all-pa.yaml
    kubectl get RequestAuthentication --all-namespaces -o yaml > all-ra.yaml
    kubectl get AuthorizationPolicy --all-namespaces -o yaml > all-ap.yaml
  2. 通過kubectl連接ASM實例對應(yīng)的Kubernetes集群

  3. 執(zhí)行以下命令,將本小節(jié)步驟1導(dǎo)出的YAML部署到ASM實例。

    替換命令中all-*為實際的YAML文件名稱。

    kubectl --kubeconfig={服務(wù)網(wǎng)格ASM對應(yīng)的kubeconfig} apply -f all-*.yaml

步驟五:遷移數(shù)據(jù)面

數(shù)據(jù)面的遷移包括Sidecar和Gateway。Sidecar的遷移和Webhook的注入配置相關(guān),因此在遷移之前需要確認已將本地Istio社區(qū)版本下對應(yīng)的mutatingwebhookconfigurations Webhook下的匹配條件istio-injection=enabled修改為非enabled的值。具體操作,請參見步驟二的第一步。

遷移Sidecar

  1. 通過滾動更新業(yè)務(wù)服務(wù)Pod來注入ASM的Sidecar版本。

    ASM的Sidecar連接到ASM實例對應(yīng)的Istiod控制面后,可享有ASM擴展的服務(wù)網(wǎng)格相關(guān)能力,例如SpringCloud支持、流量泳道、限流、路由級熔斷等。

  2. 業(yè)務(wù)Pod滾動更新后,查看對應(yīng)業(yè)務(wù)服務(wù)。

    1. 登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

    2. 網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇網(wǎng)格實例 > 網(wǎng)格狀態(tài)

      網(wǎng)格狀態(tài)頁面,可以查看當前ASM控制面和Sidecar的配置同步狀態(tài)。

(可選)遷移Gateway

入口流量網(wǎng)關(guān)有多種類型。目前,ASM提供遷移自建的Istio IngressGateway和Nginx Ingress到ASM網(wǎng)關(guān)的指導(dǎo)。具體操作,請參見自建Istio IngressGateway如何遷移至ASM網(wǎng)關(guān)Nginx Ingress如何遷移至ASM網(wǎng)關(guān)

若您需要遷移其他類型的入口流量網(wǎng)關(guān),請加入釘群(釘群號:30421250),聯(lián)系產(chǎn)品技術(shù)專家進行咨詢。

步驟六:卸載自建Istio

當Istio社區(qū)版本的Sidecar更新到ASM后,您可以執(zhí)行istioctl ps命令,查看當前Sidecar版本的分布,確認遷移完成后刪除自建Istio。

  1. 執(zhí)行以下命令,查看當前Sidecar版本的分布。

    export KUBECONFIG=<Your ACK Cluster's Kube Config File>
    ./istioctl ps

    示例輸出:

    NAME                                                   CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                      VERSION
    istio-egressgateway-666cdd84d7-p****.istio-system      Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-5dbcf9****-tnsgt     1.14.3
    istio-ingressgateway-58f4c4f77f-n****.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-5dbcf9****-tnsgt     1.14.3

    輸出結(jié)果為空,表示數(shù)據(jù)面已完整地遷移到ASM版本的Sidecar或Gateway。

  2. 執(zhí)行以下命令,卸載本地Istio。

    istioctl manifest generate <your original installation options> | kubectl delete --ignore-not-found=true -f -

    <your original installation options> 表示初安裝Istio時的選項,例如--set profile=demo

    說明

    如果您有以前安裝的Istio YAML備份,可以通過以下命令進行卸載。

     kubectl delete --ignore-not-found=true -f <your-istiod-install.yaml>

    展開查看預(yù)期輸出

    customresourcedefinition.apiextensions.k8s.io "authorizationpolicies.security.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "destinationrules.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "envoyfilters.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "gateways.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "istiooperators.install.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "peerauthentications.security.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "requestauthentications.security.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "serviceentries.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "sidecars.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "telemetries.telemetry.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "virtualservices.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "workloadentries.networking.istio.io" deleted
    customresourcedefinition.apiextensions.k8s.io "workloadgroups.networking.istio.io" deleted
    serviceaccount "istio-egressgateway-service-account" deleted
    serviceaccount "istio-ingressgateway-service-account" deleted
    serviceaccount "istio-reader-service-account" deleted
    serviceaccount "istiod" deleted
    serviceaccount "istiod-service-account" deleted
    clusterrole.rbac.authorization.k8s.io "istio-reader-clusterrole-istio-system" deleted
    clusterrole.rbac.authorization.k8s.io "istio-reader-istio-system" deleted
    clusterrole.rbac.authorization.k8s.io "istiod-clusterrole-istio-system" deleted
    clusterrole.rbac.authorization.k8s.io "istiod-istio-system" deleted
    clusterrolebinding.rbac.authorization.k8s.io "istio-reader-clusterrole-istio-system" deleted
    clusterrolebinding.rbac.authorization.k8s.io "istio-reader-istio-system" deleted
    clusterrolebinding.rbac.authorization.k8s.io "istiod-clusterrole-istio-system" deleted
    clusterrolebinding.rbac.authorization.k8s.io "istiod-istio-system" deleted
    configmap "istio" deleted
    configmap "istio-sidecar-injector" deleted
    mutatingwebhookconfiguration.admissionregistration.k8s.io "istio-sidecar-injector" deleted
    deployment.apps "istio-egressgateway" deleted
    deployment.apps "istio-ingressgateway" deleted
    deployment.apps "istiod" deleted
    Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
    poddisruptionbudget.policy "istio-egressgateway" deleted
    poddisruptionbudget.policy "istio-ingressgateway" deleted
    poddisruptionbudget.policy "istiod" deleted
    role.rbac.authorization.k8s.io "istio-egressgateway-sds" deleted
    role.rbac.authorization.k8s.io "istio-ingressgateway-sds" deleted
    role.rbac.authorization.k8s.io "istiod" deleted
    role.rbac.authorization.k8s.io "istiod-istio-system" deleted
    rolebinding.rbac.authorization.k8s.io "istio-egressgateway-sds" deleted
    rolebinding.rbac.authorization.k8s.io "istio-ingressgateway-sds" deleted
    rolebinding.rbac.authorization.k8s.io "istiod" deleted
    rolebinding.rbac.authorization.k8s.io "istiod-istio-system" deleted
    service "istio-egressgateway" deleted
    service "istio-ingressgateway" deleted
    service "istiod" deleted
  3. 執(zhí)行以下命令,刪除istio.io相關(guān)的CRD。

    kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete
    說明

    需使用和安裝同版本或更高版本的Istioctl進行操作,避免新版本新增的相關(guān)資源未卸載。更多信息,請參見Istioctl

  4. 執(zhí)行以下命令,卸載原有社區(qū)版本相關(guān)證書文件。

    kubectl delete secret istio-ca-secret -n istio-system
    kubectl delete secret cacerts -n istio-system

FAQ

如何在遷移過程中進行回滾?

展開查看回滾操作示例

  1. 修改mutatingwebhookconfiguration(istio-revision-tag-default或者istio-sidecar-injector),將istio-injection=xxx修改為istio-injection=enabled,保證默認注入采用Istio社區(qū)版本的Sidecar。

  2. 通過RemoveClusterFromServiceMesh API移除對應(yīng)的Kubernetes集群。

    打開ReserveNamespace開關(guān),保留istio-system特性。關(guān)于配置項的更多信息,請參見RemoveClusterFromServiceMesh

    移除Kubernetes集群后,Kubernetes集群的istio-system Namespace下對應(yīng)ASM相關(guān)組件和配置也會被移除,退回至最初的Istiod社區(qū)版本。

    說明

    若對應(yīng)業(yè)務(wù)Pod的Sidecar已經(jīng)切換為ASM版本的Sidecar,同樣需要進行滾動更新。回滾后,Sidecar會注入社區(qū)版本的Sidecar。

如何通過Aliyun CLI方式,遷移自建Istio社區(qū)版本至ASM?

展開查看通過Aliyun CLI方式遷移的相關(guān)說明

如何查看CA證書的有效期以及輪轉(zhuǎn)證書?

展開查看CA證書的有效期以及輪轉(zhuǎn)證書

查看證書的有效期

執(zhí)行以下命令,查看證書的有效期。請將命令中的root-cert.pem替換為您的CA Cert文件。

cat root-cert.pem  |openssl x509  -text -noout |grep Validity -A 2

示例輸出:

        Validity
            Not Before: Oct 18 08:27:44 2022 GMT
            Not After : Oct 15 08:27:44 2032 GMT

輪轉(zhuǎn)證書

當證書過期時,Sidecar連接Istiod控制面會出現(xiàn)如下報錯示例。請加入釘群(釘群號:30421250),聯(lián)系產(chǎn)品技術(shù)專家進行證書的輪轉(zhuǎn),保證證書的長期有效性。

2022-11-10T06:40:14.851043Z     warning envoy config    StreamAggregatedResources gRPC config stream closed since 702s ago: 14, connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority"
2022-11-10T06:40:34.703585Z     warning envoy config    StreamAggregatedResources gRPC config stream closed since 722s ago: 14, connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority"
2022-11-10T06:40:35.511760Z     warning envoy config    StreamAggregatedResources gRPC config stream closed since 722s ago: 14, connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority"
2022-11-10T06:40:57.653628Z     info    xdsproxy        connected to upstream XDS server: istiod.istio-system.svc:15012

如何遷移自建的Kiali、Grafana、Jaeger、日志等組件?

無需遷移,展開查看詳情

ASM控制臺的可觀察管理中心菜單下內(nèi)置了Kiali、Grafana、日志相關(guān)圖表和儀表盤等。當所有Sidecar都遷移到ASM后,您只需開啟可觀察相關(guān)功能,對應(yīng)的Metrics和Trace等相關(guān)數(shù)據(jù)會自動遷移至ASM。