为解决微服务的分布式应用架构在运维、调试,和安全管理等维度存在的问题,您可通过部署Istio创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,同时Istio不需要修改服务即可实现以上功能。

前提条件

背景信息

  • 阿里云容器服务Kubernetes 1.10.4及之后版本支持部署Istio,如果是1.10.4之前的版本,请先升级到1.10.4或之后版本。
  • 一个集群中,worker节点数量需要大于等于3个,保证资源充足可用。

操作步骤

  1. 部署Istio 。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,选择服务网格 > Istio管理,进入部署Istio页面。
    3. 设置部署Istio的配置参数。
      配置项 说明
      集群 部署Istio的目标集群。
      命名空间 默认命名空间为istio-system。
      发布名称 默认发布的名称为Istio。
      最新版本 显示Istio的最新版本。
      Pilot设置

      跟踪采样百分比(0-100):默认取值为100。

      启用服务就近访问:服务网格ASM通过Envoy代理为应用服务提供了全局负载均衡能力,您可以在多个跨地域的ACK集群中部署运行应用服务的实例。ASM将这些应用服务的运行状况、路由和后端信息提供给Envoy代理,使其能够以最佳方式将流量路由至某个服务位于多个地域的应用实例。ASM会根据发送请求的Envoy代理位置,针对目标服务的工作负载实例,进行优先级排序。开启该项功能之后,当所有实例都正常时,请求将保留在同一位置,即保持服务就近访问。

      控制Egress流量
      • 拦截对外访问的地址范围:拦截直接对外访问的地址范围。默认情况下,已包含集群Pod CIDR与Service CIDR,使用英文半角逗号分隔。

        勾选全部则会拦截所有对外访问的地址。

      • 放行对外访问的地址范围:Istio 服务网格内的服务可以直接对外访问的地址范围。默认情况下为空,使用英文半角逗号分隔。
      说明 直接放行对外访问的地址范围的优先级高于拦截对外访问的地址范围。

      例如您将同一个IP地址同时配置在直接放行对外访问的地址与拦截对外访问的地址时,您仍可以直接访问此地址,即直接放行对外访问的地址范围生效。

      网关设置 设置是否创建默认入口网关。选中创建默认入口网关创建默认入口网关,配置如下。
      • 负载均衡类型:支持选择公网内网两种类型。
      • 使用已有负载均衡:选择一个负载均衡。如没有可选的负载均衡,在右侧点击创建负载均衡,具体操作参见创建负载均衡实例
        说明 使用已有的负载均衡实例会强制覆盖已有监听。
      • 端口映射:设置您需要添加的服务端口容器端口
      证书管理 设置是否启用 cert-manager 管理证书。cert-manager可用于使用存储在Kubernetes Secret资源中的任意签名密钥对来获取证书。
      可观测性设置 勾选启用 Prometheus 度量日志收集
      • 选择新建Prometheus服务时:
        您可以勾选持久化存储且需要设置TSDB地址。
        说明 使用持久化存储时,您需要登录时序时空数据库控制台开通阿里云时序时空数据库服务。
      • 选择使用已有Prometheus服务时:需设置服务地址。

        如果是在同一集群内,可以使用[服务名].[命名空间]:[端口]的方式,如:http://prometheus-default-server.mygw1:80。如果不是在同一集群内,则需要提供能访问的IP地址,如:http://1.2.3.4:9090。

      勾选启用Grafana度量展示时,您需要设置用户名和密码。默认都是admin。
      勾选启用 Kiali 可视化服务网格时,您需要设置用户名和密码。默认都是admin。
      链路追踪设置 启用链路追踪:启用该选项,则需要开通阿里云链路追踪服务。同时需要指定对应的接入点地址。例如,接入点地址http://tracing-analysis-dc-hz.aliyuncs.com/.../api/v1/spans,表示启用该选项后,zipkin客户端根据v1版本的 API的公网(或者内网)接入点地址把采集数据传输到链路跟踪。
      说明 如果使用内网接入点,请确保Kubernetes集群与链路追踪服务在相同区域,保证网络互通。
    4. 单击部署 Istio,启动部署。
      在部署页面下方,可实时查看部署进展及状态。查看部署结果
    可通过以下方法查看部署是否成功:
    • 部署 Istio页面,部署 Istio变为已部署部署完成
    • 在控制台左侧导航栏,选择应用 > 容器组,选择部署Istio的集群及命名空间,可查看到已经部署Istio的相关容器组。容器组查看
    • 单击左侧导航栏路由与负载均衡 > 服务,选择部署Istio的集群及命名空间,可查看到已经部署Istio相关服务所提供的访问地址。部署istio的访问地址
  2. 管理Istio Ingress Gateway。
    在部署Istio时,您可以通过选中创建默认入口网关部署一个Ingress Gateway。对于已有旧版本,建议升级到当前最新版本。如果需要对Ingress Gateway的配置进行调整,可以按照如下步骤进行更新。created ingress gateway
    1. 在左侧导航栏选择应用 > 发布,单击Helm页签。
    2. 单击Istio右侧的更新,在弹出的更新发布页面中,可以看到如下示例参数定义。
      gateways:
        enabled: true
        ingress:
          - enabled: true
            gatewayName: ingressgateway
            maxReplicas: 5
            minReplicas: 1
            ports:
              - name: status-port
                port: 15020
                targetPort: 15020
              - name: http2
                nodePort: 31380
                port: 80
                targetPort: 80
              - name: https
                nodePort: 31390
                port: 443
                targetPort: 0
              - name: tls
                port: 15443
                targetPort: 15443
            replicaCount: 1
            serviceType: LoadBalancer
        k8singress: {}
    3. 修改相应的参数后,单击更新
      说明
      • replicaCount:指定副本数。
      • ports:设置启用的端口。
      • serviceType:指定服务类型,可以设置为LoadBalancer、ClusterIP或者NodePort。
      • serviceAnnotations:当服务类型为设置LoadBalancer时,通过设置serviceAnnotations参数指定使用内网还是公网负载均衡、使用已有的SLB等。其他参数具体参见通过负载均衡访问服务
  3. 添加网关。
    作为Istio on ACK安装的一部分,提供了一个Istio入口网关。升级时,Istio和包括默认入口网关在内的所有默认资源都会自动升级。

    如果添加入口或出口网关,则它们在您的控制之下,并且在自动升级期间不会对其进行修改。请注意,在1.1及更高版本中,默认情况下不安装Istio egress网关。

    默认入口网关适用于已安装资源(RBAC、服务、部署),除了添加字段之外不需要自定义的部署。请勿更改默认入口网关配置中的任何值,因为在自动升级期间更改将恢复为默认值。对于需要自定义的更复杂方案,您需要创建新的入口网关。