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

前提条件

背景信息

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

操作步骤

  1. 部署istio 。
    1. 登录容器服务管理控制台
    2. Kubernetes 菜单下, 单击左侧导航栏中的服务网格 > Istio管理,进入部署Istio页面。
    3. 选择所需的集群并设置相应的配置参数。
    4. 根据如下信息,部署Istio。
      配置 说明
      集群 部署Istio的目标集群。
      命名空间 部署Istio的命名空间。
      发布名称 发布的Istio名称。
      启用 Prometheus 度量日志收集 是否启用Prometheus 收集度量日志。默认情况下启用。
      启用 Grafana 度量展示 是否启用Grafana 展示指标的度量数据。默认情况下启用。
      启用 Sidecar 自动注入 是否启用 Sidecar 进行容器的自动注入。默认情况下启用。
      启用 Kiali 可视化服务网格 是否启用 Kiali 可视化服务网格。默认情况下不启用。
      • 用户名:指定用户名称。默认情况下是admin。
      • 密码:指定密码。默认情况下是admin。
      链路追踪设置 启用链路追踪:启用该选项,则需要开通阿里云链路追踪服务。同时需要指定对应的接入点地址。例如,接入点地址http://tracing-analysis-dc-hz.aliyuncs.com/.../api/v1/spans,表示启用该选项后,zipkin客户端根据v1版本的 API的公网(或者内网)接入点地址把采集数据传输到链路跟踪。
      说明 如果使用内网接入点,请确保Kubernetes集群与链路追踪服务在相同区域,保证网络互通。
      Pilot设置 跟踪采样百分比(0-100):默认取值为1。
      控制Egress流量
      • 直接放行对外访问的地址范围:Istio 服务网格内的服务可以直接对外访问的地址范围。默认情况下为空,使用英文半角逗号分隔。
      • 拦截对外访问的地址范围:拦截直接对外访问的地址范围。默认情况下,已包含集群 Pod CIDR 与 Service CIDR,使用英文半角逗号分隔。
      • 勾选全部选项则会拦截所有对外访问的地址。
      说明 直接放行对外访问的地址范围的优先级高于拦截对外访问的地址范围。

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

    5. 单击部署 Istio,启动部署。
      在部署页面下方,可实时查看部署进展及状态。
      查看部署结果
    可通过以下方法查看部署是否成功:
    • 部署 Istio页面下方,部署 Istio变为已部署
      部署完成
    • 单击左侧导航栏应用 > 容器组,选择部署Istio的集群及命名空间,可查看到已经部署Istio的相关容器组。
      容器组查看
    • 单击左侧导航栏路由与负载均衡 > 服务,选择部署Istio的集群及命名空间,可查看到已经部署Istio相关服务所提供的访问地址。
      部署istio的访问地址
  2. 管理Istio Ingress Gateway。
    上述部署 Istio之后,Istio 1.1.4之后默认会创建一个Ingress Gateway。对于已有旧版本,建议升级到当前最新版本。如果需要对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、服务、部署),除了添加字段之外不需要自定义的部署。请勿更改默认入口网关配置中的任何值,因为在自动升级期间更改将恢复为默认值。对于需要自定义的更复杂方案,您需要创建新的入口网关。