ASM集成應(yīng)用型負(fù)載均衡實(shí)例ALB
對(duì)于處在數(shù)據(jù)面且網(wǎng)絡(luò)插件類型為Terway的阿里云容器服務(wù)ACK集群,阿里云服務(wù)網(wǎng)格ASM支持集成應(yīng)用型負(fù)載均衡實(shí)例(ALB),以此簡(jiǎn)化服務(wù)治理,保障服務(wù)間通信的認(rèn)證安全以及提供網(wǎng)格可觀測(cè)性能力,降低開(kāi)發(fā)與運(yùn)維的工作負(fù)擔(dān)。本文主要介紹如何集成服務(wù)網(wǎng)格ASM網(wǎng)關(guān)與應(yīng)用型負(fù)載均衡實(shí)例ALB。
前提條
已添加集群到ASM實(shí)例,且ASM實(shí)例和ACK集群滿足以下要求。
ASM實(shí)例:規(guī)格為企業(yè)版。
ACK集群:
網(wǎng)絡(luò)插件類型為Terway。
CCM(Cloud Controller Manager)組件版本為v1.9.3.313-g748f81e-aliyun及以上。更多信息,請(qǐng)參見(jiàn)Cloud Controller Manager。
已安裝ALB Ingress Controller組件。具體操作,請(qǐng)參見(jiàn)管理組件。
已為default命名空間啟用Sidecar網(wǎng)格代理自動(dòng)注入。具體操作,請(qǐng)參見(jiàn)啟用自動(dòng)注入。
已創(chuàng)建負(fù)載均衡CLB類型為私網(wǎng)訪問(wèn)、服務(wù)端口為80的入口網(wǎng)關(guān)。具體操作,請(qǐng)參見(jiàn)創(chuàng)建入口網(wǎng)關(guān)。
步驟一:部署測(cè)試應(yīng)用
執(zhí)行以下命令,使用數(shù)據(jù)面集群的KubeConfig來(lái)創(chuàng)建Bookinfo示例。更多信息,請(qǐng)參見(jiàn)在ASM實(shí)例關(guān)聯(lián)的集群中部署應(yīng)用。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml
步驟二:創(chuàng)建Istio資源
本文將以創(chuàng)建的網(wǎng)關(guān)資源和虛擬服務(wù)進(jìn)行后續(xù)測(cè)試。
創(chuàng)建網(wǎng)關(guān)規(guī)則。
登錄ASM控制臺(tái),在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁(yè)面,單擊目標(biāo)實(shí)例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)關(guān)規(guī)則頁(yè)面,單擊創(chuàng)建,進(jìn)行如下配置。
在頁(yè)面下方單擊預(yù)覽,查看網(wǎng)關(guān)規(guī)則對(duì)應(yīng)的YAML文件,確認(rèn)無(wú)誤后,單擊確定,然后在創(chuàng)建頁(yè)面下方,單擊創(chuàng)建。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: bookinfo-gateway namespace: default spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - '*'
創(chuàng)建虛擬服務(wù)并設(shè)置路由。
在網(wǎng)格詳情頁(yè)面左側(cè)導(dǎo)航欄,選擇 。
在虛擬服務(wù)頁(yè)面,單擊創(chuàng)建,為bookinfo-gateway網(wǎng)關(guān)設(shè)置虛擬服務(wù)配置。
在創(chuàng)建頁(yè)面下方,單擊預(yù)覽,查看YAML文件,確認(rèn)無(wú)誤后,單擊確認(rèn),然后在創(chuàng)建頁(yè)面下方,單擊創(chuàng)建。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: bookinfo namespace: default spec: gateways: - bookinfo-gateway hosts: - '*' http: - match: - uri: exact: /productpage - uri: prefix: /static - uri: exact: /login - uri: exact: /logout - uri: prefix: /api/v1/products route: - destination: host: productpage port: number: 9080
步驟三:創(chuàng)建AlbConfig
場(chǎng)景一:已有ALB標(biāo)準(zhǔn)版實(shí)例集成ASM網(wǎng)關(guān)
登錄負(fù)載均衡控制臺(tái),獲取ALB實(shí)例ID。
使用以下內(nèi)容,創(chuàng)建alb-demo.yaml文件。
將AlbConfig的
config.id
替換為ALB實(shí)例ID。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: id: alb-xxxxx forceOverride: false
執(zhí)行以下命令,創(chuàng)建AlbConfig。
kubectl apply -f alb-demo.yaml
場(chǎng)景二:新建ALB實(shí)例集成ASM網(wǎng)關(guān)
使用以下內(nèi)容,創(chuàng)建alb-demo.yaml文件。更多信息,請(qǐng)參見(jiàn)ALB Ingress快速入門。
此處設(shè)置自動(dòng)創(chuàng)建的ALB名稱為alb-demo。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: name: alb-demo addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** - vSwitchId: vsw-uf6nun9tql5t8nh15****
參數(shù)
說(shuō)明
spec.config.name
表示ALB實(shí)例名稱。
addressType
(必選)表示負(fù)載均衡的地址類型。取值如下:
Internet(默認(rèn)值):負(fù)載均衡具有公網(wǎng)IP地址,DNS域名被解析到公網(wǎng)IP,因此可以在公網(wǎng)環(huán)境訪問(wèn)。
Intranet:負(fù)載均衡只有私網(wǎng)IP地址,DNS域名被解析到私網(wǎng)IP,因此只能被負(fù)載均衡所在VPC的內(nèi)網(wǎng)環(huán)境訪問(wèn)。
zoneMappings
(必選)用于設(shè)置ALB Ingress交換機(jī)ID。您需要至少指定兩個(gè)不同可用區(qū)交換機(jī)ID,指定的交換機(jī)必須在ALB當(dāng)前所支持的可用區(qū)內(nèi)。關(guān)于ALB Ingress支持的地域與可用區(qū),請(qǐng)參見(jiàn)ALB支持的地域與可用區(qū);關(guān)于如何創(chuàng)建交換機(jī),請(qǐng)參見(jiàn)創(chuàng)建和管理交換機(jī)。
執(zhí)行如下命令,創(chuàng)建AlbConfig。
kubectl apply -f alb-demo.yaml
步驟四:創(chuàng)建IngressClass
創(chuàng)建并拷貝以下內(nèi)容到alb.yaml文件中,用于創(chuàng)建IngressClass。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: default scope: Cluster
執(zhí)行以下命令,創(chuàng)建IngressClass。
kubectl apply -f alb.yaml
預(yù)期輸出:
ingressclass.networking.k8s.io/alb created
步驟五:配置Ingress
ASM網(wǎng)關(guān)的服務(wù)創(chuàng)建在istio-system命名空間中。您需要在數(shù)據(jù)面集群(ACK集群)中的istio-system命名空間中創(chuàng)建Ingress。端口和創(chuàng)建ASM網(wǎng)關(guān)時(shí)設(shè)置的80端口保持一致。
創(chuàng)建并拷貝以下內(nèi)容到asm-gateway-ingress.yaml中。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: asm-gateway-ingress namespace: istio-system spec: ingressClassName: alb rules: - http: paths: - backend: service: name: istio-ingressgateway port: number: 80 path: /* pathType: ImplementationSpecific
執(zhí)行以下命令,創(chuàng)建Ingress。
kubectl apply -f asm-gateway-ingress.yaml
步驟六:測(cè)試訪問(wèn)
執(zhí)行以下命令,獲取Ingress實(shí)例的地址。
kubectl get ing -n istio-system
預(yù)期輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE asm-gateway-ingress alb * alb-xxxx.xxxx.alb.aliyuncs.com 80 18h
可以看到Ingress實(shí)例的地址為
alb-xxxx.xxxx.alb.aliyuncs.com
。訪問(wèn)ASM網(wǎng)關(guān)。
方式一:通過(guò)上一步獲取到的Ingress實(shí)例的地址訪問(wèn)ASM網(wǎng)關(guān)
http://alb-xxxx.xxxx.alb.aliyuncs.com/productpage
。方式二:登錄ALB控制臺(tái),通過(guò)ALB公網(wǎng)地址訪問(wèn)ASM網(wǎng)關(guān)。如果ALB已綁定域名,也可以通過(guò)域名進(jìn)行訪問(wèn)。