开发者社区> 问答> 正文

如何部署应用示例到包含同 VPC 多集群的 ASM 实例?

如何部署应用示例到包含同 VPC 多集群的 ASM 实例?

展开
收起
小天使爱美 2020-03-20 20:11:52 654 0
1 条回答
写回答
取消 提交回答
  • 通过服务网格 ASM,可以将一个应用的服务组件部署在同 VPC 的多个集群上。本文以 Bookinfo 应用为例,介绍如何将该应用部署到包含两个集群的 ASM 实例。

    前提条件 在同一 VPC 下已创建两个 ACK 集群(本例中 m1c1 和 m1c2),详情参见创建 Kubernetes 集群。 已创建一个 ASM 实例(本例中 mesh1),详情参见创建 ASM 实例。 步骤一:修改集群的安全组名称 将两个集群对应的安全组名称修改为易于辨识的名称,本例中为 m1c1-sg 和 m1c2-sg。

    登录ECS管理控制台。 在左侧导航栏,单击网络与安全 > 安全组。 在顶部状态栏左上角处,选择地域。 在安全组列表页面中,找到需要修改的安全组,单击操作列下的修改。 在弹出的对话框中,修改安全组名称和描述。 单击确定。 修改后的名称,如下图所示。修改安全组名称 步骤二:配置集群的互访联通性 为了使两个集群能够互相访问,需要为彼此添加安全组访问规则。

    在 m1c1-sg 安全组配置界面,添加以 m1c2-sg 为授权对象的访问规则。详情参见添加安全组规则。在m1c1授权m1c2 在 m1c2-sg 安全组规则配置界面,添加以 m1c1-sg 为授权对象的访问规则。在m2c1授权m1c1 步骤三:添加集群到 ASM 实例并部署集群的入口网关 将两个集群添加到 ASM 实例后,由于两个集群已实现访问互通,因此只需为一个集群部署入口网关。

    将两个集群添加到 ASM 实例,详情参见添加集群到 ASM 实例。 为 m1c1 集群部署入口网关,详情参见添加入口网关。 步骤四:部署 Bookinfo 应用 为了演示 ASM 跨集群的应用部署能力,Bookinfo 应用的不同微服务分别部署在两个集群上。

    在 m1c2 中部署不包含 review-v3 deployment 的 Bookinfo 应用,详情参见部署应用到 ASM 实例。 说明 Review-v3 deployment 对应的功能是书评中显示红色星。 对应的 Yaml 文件内容如下所示: ##################################################################################################

    Details service

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: details labels: app: details service: details spec: ports: - port: 9080 name: http selector: app: details

    apiVersion: v1 kind: ServiceAccount metadata: name: bookinfo-details labels: account: details

    apiVersion: apps/v1 kind: Deployment metadata: name: details-v1 labels: app: details version: v1 spec: replicas: 1 selector: matchLabels: app: details version: v1 template: metadata: labels: app: details version: v1 spec: serviceAccountName: bookinfo-details containers: - name: details image: docker.io/istio/examples-bookinfo-details-v1:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    ##################################################################################################

    Ratings service

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: ratings labels: app: ratings service: ratings spec: ports: - port: 9080 name: http selector: app: ratings

    apiVersion: v1 kind: ServiceAccount metadata: name: bookinfo-ratings labels: account: ratings

    apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v1 labels: app: ratings version: v1 spec: replicas: 1 selector: matchLabels: app: ratings version: v1 template: metadata: labels: app: ratings version: v1 spec: serviceAccountName: bookinfo-ratings containers: - name: ratings image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    ##################################################################################################

    Reviews service

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: reviews labels: app: reviews service: reviews spec: ports: - port: 9080 name: http selector: app: reviews

    apiVersion: v1 kind: ServiceAccount metadata: name: bookinfo-reviews labels: account: reviews

    apiVersion: apps/v1 kind: Deployment metadata: name: reviews-v1 labels: app: reviews version: v1 spec: replicas: 1 selector: matchLabels: app: reviews version: v1 template: metadata: labels: app: reviews version: v1 spec: serviceAccountName: bookinfo-reviews containers: - name: reviews image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    apiVersion: apps/v1 kind: Deployment metadata: name: reviews-v2 labels: app: reviews version: v2 spec: replicas: 1 selector: matchLabels: app: reviews version: v2 template: metadata: labels: app: reviews version: v2 spec: serviceAccountName: bookinfo-reviews containers: - name: reviews image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    ---

    apiVersion: apps/v1

    kind: Deployment

    metadata:

    name: reviews-v3

    labels:

    app: reviews

    version: v3

    spec:

    replicas: 1

    selector:

    matchLabels:

    app: reviews

    version: v3

    template:

    metadata:

    labels:

    app: reviews

    version: v3

    spec:

    serviceAccountName: bookinfo-reviews

    containers:

    - name: reviews

    image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0

    imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 9080


    ##################################################################################################

    Productpage services

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: productpage labels: app: productpage service: productpage spec: ports: - port: 9080 name: http selector: app: productpage

    apiVersion: v1 kind: ServiceAccount metadata: name: bookinfo-productpage labels: account: productpage

    apiVersion: apps/v1 kind: Deployment metadata: name: productpage-v1 labels: app: productpage version: v1 spec: replicas: 1 selector: matchLabels: app: productpage version: v1 template: metadata: labels: app: productpage version: v1 spec: serviceAccountName: bookinfo-productpage containers: - name: productpage image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    在 m1c1 中部署 review-v3 以及 rating service(review 依赖的服务)。 对应的 YAML文件内容如下所示: ##################################################################################################

    Reviews service

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: reviews labels: app: reviews service: reviews spec: ports: - port: 9080 name: http selector: app: reviews

    apiVersion: v1 kind: ServiceAccount metadata: name: bookinfo-reviews labels: account: reviews

    apiVersion: apps/v1 kind: Deployment metadata: name: reviews-v3 labels: app: reviews version: v3 spec: replicas: 1 selector: matchLabels: app: reviews version: v3 template: metadata: labels: app: reviews version: v3 spec: serviceAccountName: bookinfo-reviews containers: - name: reviews image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9080

    ##################################################################################################

    Ratings service

    ################################################################################################## apiVersion: v1 kind: Service metadata: name: ratings labels: app: ratings service: ratings spec: ports: - port: 9080 name: http selector: app: ratings 步骤五:添加虚拟服务和 Istio 网关 在 ASM 实例的 default 命名空间下新建一个虚拟服务,名为 bookinfo,详情参见管理 Istio 资源定义。 对应的 Yaml 文件内容如下所示: apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - "" gateways: - bookinfo-gateway 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 在 ASM 实例的 default 命名空间下新建一个 Istio 网关,名为 bookinfo-gateway,详情参见管理 Istio 资源定义。 对应的 Yaml 文件内容如下所示: apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "" 访问 productpage 页面,刷新页面时会轮流显示 reviews 的 3 个版本。虽然 review-v3 和其他服务不在同一个集群中,也可以正常显示。

    (可选)步骤六:指定 reviews 总是用 v3 版本 通过定义目标规则和虚拟服务,可以定义 Bookinfo 应用的微服务部署策略。本例中将指定 Bookinfo 总是使用 review v3 版本。

    在 ASM 实例的 default 命名空间下新建一个目标规则,名为 reviews。 Yaml 文件的内容如下所示: apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: reviews spec: host: reviews subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v3 labels: version: v3 添加目标规则 在 ASM 实例的 default 命名空间下新建一个虚拟服务,名为 reviews。 对应的 Yaml 文件内容如下所示: apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3 此时访问 productpage 页面,reviews 将始终使用 v3 版本,即书评中为红色星。书评用红星

    2020-03-20 20:12:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
经典网络迁移VPC最佳实践 立即下载
AWS 数据中心与 VPC 揭秘 立即下载
阿里云总监课第五期第四节:从容器到云原生–服务网格 立即下载