日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

假如你正在一家典型的企業(yè)里工作,需要與多個(gè)團(tuán)隊(duì)一起工作,并為客戶提供一個(gè)獨(dú)立的軟件,組成一個(gè)應(yīng)用程序。你的團(tuán)隊(duì)遵循微服務(wù)架構(gòu),并擁有由多個(gè)Kubernetes集群組成的廣泛基礎(chǔ)設(shè)施。

由于微服務(wù)分布在多個(gè)集群中,你需要設(shè)計(jì)一個(gè)解決方案來集中管理所有微服務(wù)。幸運(yùn)的是,你正在使用Istio,提供這個(gè)解決方案只不過是另一個(gè)配置的變化。

像Istio這樣的服務(wù)網(wǎng)格技術(shù)可以幫助你安全地發(fā)現(xiàn)和連接分布在多個(gè)集群和環(huán)境中的微服務(wù)。今天我們來討論一下使用Istio管理托管在多個(gè)Kubernetes集群中的微服務(wù)。

如何使用Istio 1.6管理多集群中的微服務(wù)?

 

架構(gòu)說明

Istio使用以下組件提供跨集群服務(wù)發(fā)現(xiàn):

  • Istio CoreDNS:每個(gè)Istio控制平面都有一個(gè)CoreDNS。Istio使用它來發(fā)現(xiàn)全局范圍上定義的服務(wù)。例如,如果一個(gè)托管在集群1上的微服務(wù)需要連接到另一個(gè)托管在集群2上的微服務(wù),你需要為運(yùn)行在集群2上的微服務(wù)在Istio CoreDNS上做一個(gè)全局條目。
  • Root CA:由于Istio需要在不同集群上運(yùn)行的服務(wù)之間建立mTLS連接,因此需要使用共享的Root CA為兩個(gè)集群生成中間CA證書。這就在不同集群上運(yùn)行的微服務(wù)之間建立了信任,因?yàn)橹虚gCA共享同一個(gè)Root CA。
  • Istio Ingress網(wǎng)關(guān):集群間的通信通過Ingress網(wǎng)關(guān)進(jìn)行,服務(wù)之間沒有直接連接。因此,你要確保Ingress網(wǎng)關(guān)是可發(fā)現(xiàn)的,并且所有集群都可以連接到它。
如何使用Istio 1.6管理多集群中的微服務(wù)?

集群間通信

服務(wù)發(fā)現(xiàn)

Istio使用以下步驟來促進(jìn)服務(wù)發(fā)現(xiàn):

  1. 集群上都有相同的控制平面,以促進(jìn)高可用性。
  2. Kube DNS與Istio CoreDNS為支點(diǎn),以提供全局服務(wù)發(fā)現(xiàn)。
  3. 用戶通過Istio CoreDNS中的ServiceEntries定義遠(yuǎn)程服務(wù)的路由,格式為name.namespace.global。
  4. 源sidecar使用全局CoreDNS條目將流量路由到目標(biāo)Istio Ingress網(wǎng)關(guān)。
  5. 目標(biāo) Istio Ingress 網(wǎng)關(guān)將流量路由到正確的微服務(wù) pod。

前期準(zhǔn)備

本文假設(shè)你已經(jīng)對Kubernetes以及Istio的工作原理有一個(gè)基本的了解。為了能夠跟上我們接下來的演示,請確保:

  • 你有至少兩個(gè)Kubernetes集群,Kubernetes的版本為1.14、1.15或1.16
  • 你擁有在集群內(nèi)安裝和配置Istio的權(quán)限
  • 你在兩個(gè)Kubernetes集群上都有集群管理權(quán)限。
  • Ingress網(wǎng)關(guān)可通過網(wǎng)絡(luò)負(fù)載均衡器或類似配置連接到其他集群。扁平網(wǎng)絡(luò)是不必要的。

安裝Istio

在兩個(gè)集群上,使用以下命令安裝Istio 1.6.1:

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.1 sh -
cd istio-1.6.1
export PATH=$PWD/bin:$PATH

由于我們需要用共享的根證書生成的中間證書來啟動(dòng)我們的Istio服務(wù)網(wǎng)格,所以使用中間證書創(chuàng)建一個(gè)secret。

在這個(gè)例子中,我們使用提供的樣本證書。但是,我不建議你在生產(chǎn)中使用這些證書,因?yàn)樗鼈円话愣际强奢p松獲取的,而且是眾所周知的。最好是使用你的組織的Root CA來生成中間CA證書。

在兩個(gè)集群上運(yùn)行以下命令來使用樣本證書。如果你使用的是你的證書,請?zhí)鎿Q適用的文件路徑。

kubectl create namespace istio-system
kubectl create secret generic cacerts -n istio-system 
    --from-file=samples/certs/ca-cert.pem 
    --from-file=samples/certs/ca-key.pem 
    --from-file=samples/certs/root-cert.pem 
    --from-file=samples/certs/cert-chain.pem
secret/cacerts created

由于我們需要安裝Istio進(jìn)行多集群設(shè)置,所以在兩個(gè)集群上使用提供的Istio多集群網(wǎng)關(guān)manifest文件。

$ istioctl manifest Apply -f install/kubernetes/operator/examples/multicluster/values-istio-multicluster-gateways.yaml
- Applying manifest for component Base...
? Finished applying manifest for component Base.
- Applying manifest for component Pilot...
? Finished applying manifest for component Pilot.
  Waiting for resources to become ready...
- Applying manifest for component AddonComponents...
- Applying manifest for component IngressGateways...
- Applying manifest for component EgressGateways...
? Finished applying manifest for component EgressGateways.
? Finished applying manifest for component IngressGateways.
? Finished applying manifest for component AddonComponents.
? Installation complete

配置KubeDNS

下一步是將DNS解析從Kube DNS聯(lián)邦到Istio CoreDNS。讓我們通過為kube-dns定義一個(gè)ConfigMap來配置一個(gè)存根域。在兩個(gè)集群上應(yīng)用以下manifest:

$ kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {"global": ["$(kubectl get svc -n istio-system istiocoredns -o jsonpath={.spec.clusterIP})"]}
EOF

configmap/kube-dns configured

設(shè)置上下文(context)

由于我們需要為不同的活動(dòng)連接兩個(gè)集群,因此獲取上下文并將其存儲(chǔ)在環(huán)境變量中會(huì)很有意義。有了這些,我們只要在kubectl命令中加入上下文,就可以在我們選擇的集群中運(yùn)行kubectl命令。

獲取上下文:

$ kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO      NAMESPACE
          cluster-1   cluster-1   cluster-1
*         cluster-2   cluster-2   cluster-2

設(shè)置環(huán)境變量以使用上下文:

$ export CTX_CLUSTER1=$(kubectl config view -o jsonpath='{.contexts[0].name}')
$ export CTX_CLUSTER2=$(kubectl config view -o jsonpath='{.contexts[1].name}')
$ echo CTX_CLUSTER1 = ${CTX_CLUSTER1}, CTX_CLUSTER2 = ${CTX_CLUSTER2}
CTX_CLUSTER1 = cluster-1, CTX_CLUSTER2 = cluster-2

部署示例微服務(wù)

我們先在集群1的foo命名空間上部署sleep微服務(wù)。

$ kubectl create --context=$CTX_CLUSTER1 namespace foo
namespace/foo created
$ kubectl label --context=$CTX_CLUSTER1 namespace foo istio-injection=enabled
namespace/foo labeled
$ kubectl apply --context=$CTX_CLUSTER1 -n foo -f samples/sleep/sleep.yaml
serviceaccount/sleep created
service/sleep created
deployment.apps/sleep created
$ export SLEEP_POD=$(kubectl get --context=$CTX_CLUSTER1 -n foo pod -l app=sleep -o jsonpath={.items..metadata.name})

現(xiàn)在我們在集群2的bar命名空間上部署httpbin微服務(wù):

$ kubectl create --context=$CTX_CLUSTER2 namespace bar
namespace/bar created
$ kubectl label --context=$CTX_CLUSTER2 namespace bar istio-injection=enabled
namespace/bar labeled
$ kubectl apply --context=$CTX_CLUSTER2 -n bar -f samples/httpbin/httpbin.yaml
serviceaccount/httpbin created
service/httpbin created
deployment.apps/httpbin created

創(chuàng)建服務(wù)條目

現(xiàn)在我們需要在Istio CoreDNS上創(chuàng)建一個(gè)服務(wù)條目以便于我們可以從集群1中發(fā)現(xiàn)集群2上的服務(wù)。由于所有的通信都會(huì)通過Ingress 網(wǎng)關(guān),導(dǎo)出集群2 Ingress網(wǎng)關(guān)地址。

export CLUSTER2_GW_ADDR=$(kubectl get --context=$CTX_CLUSTER2 svc --selector=app=istio-ingressgateway 
    -n istio-system -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

為了讓集群1上的服務(wù)能夠發(fā)現(xiàn)集群2上的httpbin,我們需要在集群1上為httpbin.bar.global創(chuàng)建一個(gè)ServiceEntry。這樣可以保證集群1上的Istio Core DNS在集群1上的服務(wù)到達(dá)httpbin.bar.global這個(gè)端點(diǎn)時(shí),可以到達(dá)集群2的Ingress網(wǎng)關(guān)。下面的yaml:

  • 在hosts部分定義服務(wù)域名
  • 位置是mesh_INTERNAL,因?yàn)槲覀冃枰哑渌?wù)當(dāng)作同一個(gè)服務(wù)網(wǎng)格的一部分
  • 將服務(wù)暴露在8000端口上
  • 我們需要給該服務(wù)提供一個(gè)獨(dú)特的IP地址。該IP地址不需要可路由,并且你可以使用240.0.0.0/16范圍內(nèi)的任意地址
  • 我們在端點(diǎn)地址部分上定義集群2 ingress網(wǎng)關(guān)地址,以便于請求可以路由給它。端口15443是Ingress網(wǎng)關(guān)的SNI識(shí)別的Envoy代理端口,用于在目標(biāo)群集服務(wù)的Pod之間路由流量。

應(yīng)用yaml文件:

$ kubectl apply --context=$CTX_CLUSTER1 -n foo -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: httpbin-bar
spec:
  hosts:
  - httpbin.bar.global
  location: MESH_INTERNAL
  ports:
  - name: http1
    number: 8000
    protocol: http
  resolution: DNS
  addresses:
  - 240.0.0.2
  endpoints:
  - address: ${CLUSTER2_GW_ADDR}
    ports:
      http1: 15443 # Do not change this port value
EOF

serviceentry.networking.istio.io/httpbin-bar created

測試服務(wù)

現(xiàn)在讓我們從sleep微服務(wù)中產(chǎn)生一些流量,看看它是否能到達(dá)集群2上運(yùn)行的httpbin微服務(wù)。

$ kubectl exec --context=$CTX_CLUSTER1 $SLEEP_POD -n foo -c sleep -- curl -I httpbin.bar.global:8000/headers
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0HTTP/1.1 200 OK
  0   519    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
server: envoy
date: Sat, 16 May 2020 23:03:22 GMT
content-type: application/json
content-length: 519
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 37

我們得到一個(gè)成功的響應(yīng)!恭喜你,我們已經(jīng)成功地使用Istio在多個(gè)Kubernetes集群之間配置了服務(wù)發(fā)現(xiàn)。

結(jié) 論

感謝你的閱讀,希望你能喜歡這篇文章。

這是一個(gè)在多個(gè)集群上運(yùn)行的高可用Istio服務(wù)網(wǎng)格配置的演示。你也可以有一個(gè)共享的控制平面配置,但這并不推薦用于生產(chǎn)——如果你因?yàn)橹袛喽ヒ粋€(gè)集群,你也會(huì)失去對正在運(yùn)行的集群的控制。

分享到:
標(biāo)簽:管理 Istio 1.6
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定