阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本篇文章是系列中的第一篇,主要讲述利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。

概述

[Announcement] Istio第一个生产可用版本1.0于2018年7月31日正式发布。

注意:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的问题分析。 我们会持续更新遇到的问题及其解决方法。

图片.png

Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,并且关键的一点是并不需要修改服务本身就可以实现上述功能。

Istio主要提供以下功能:

  • 流量管理: 控制服务之间调用的流量和API调用; 使得调用更可靠,并使网络在恶劣情况下更加健壮;
  • 可观察性: 获取服务之间的依赖,以及服务调用的流量走向; 从而提供快速识别问题的能力;
  • 策略执行:控制服务的访问策略,不需要改动服务本身;
  • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转;

本篇文章是系列中的第一篇,主要讲述利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。

阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali

Istio架构

从架构上看,Istio主要分为2个部分,即:

  • 控制面板: 管理代理,用于支持流量路由/运行时执行策略等;
  • 数据面板: 由一系列的智能代理(默认为Envoy)构成,用于仲裁和控制服务之间的网络交互;

图片.png

Proxy/Envoy

Envoy将作为一个独立的sidecar与相关微服务部署在同一个Kubernetes的pod上,并提供一系列的属性给Mixer.Mixer以此作为依据执行策略,并发送到监控系统.

这种sidecar代理模型不需要改变任何服务本身的逻辑,并能增加一系列的功能。

Mixer

Mixer负责在服务网格上执行访问控制和使用策略,并从Envoy代理和其他服务收集遥测数据。代理提取请求级属性,发送到Mixer进行评估。

Mixer包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出Envoy代理和Istio管理的服务。 后续文章会陆续介绍相关内容。

Pilot

Pilot负责收集和验证配置并将其传播到各种Istio组件。它从Mixer和Envoy中抽取环境特定的实现细节,为他们提供用户服务的抽象表示,独立于底层平台。此外,流量管理规则(即通用4层规则和7层HTTP/gRPC路由规则)可以在运行时通过Pilot进行编程。

Citadel

提供服务间以及用户之间的认证,确保不需要修改服务代码的前提下增强服务之间的安全性。主要包括以下3个组件:

  • 身份识别

    • 当Istio运行在Kubernetes时,Auth会使用Kubernetes提供的服务账号来识别运行服务的主体是谁.
  • key管理

    • Auth提供了一个CA自动化生成和管理key和证书.
  • 通讯安全

    • 服务间的通讯通过Envoy在客户端和服务端提供tunnel来保证服务调用的安全.

下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio。

准备Kubernetes环境

阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考创建Kubernetes集群

体验通过应用目录简便部署

点击左侧的应用目录,在右侧选中ack-istio,如下:

图片.png

点击参数, 可以通过修改参数配置进行定制化,如下所示定义了通用参数:

Parameter Description Default
global.hub Specifies the HUB for most images used by Istio registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog
global.tag Specifies the TAG for most images used by Istio 1.0.0
global.proxy.image Specifies the proxy image name istio-proxyv2
global.imagePullPolicy Specifies the image pull policy IfNotPresent
global.controlPlaneSecurityEnabled Specifies whether control plane mTLS is enabled false
global.mtls.enabled Specifies whether mTLS is enabled by default between services false
global.mtls.mtlsExcludedServices List of FQDNs to exclude from mTLS -"kubernetes.default.svc.cluster.local"
global.rbacEnabled Specifies whether to create Istio RBAC rules or not true
global.refreshInterval Specifies the mesh discovery refresh interval 10s
global.arch.amd64 Specifies the scheduling policy for amd64 architectures 2
global.arch.s390x Specifies the scheduling policy for s390x architectures 2
global.arch.ppc64le Specifies the scheduling policy for ppc64le architectures 2
galley.enabled Specifies whether Galley should be installed for server-side config validation. Requires k8s >= 1.9 false

除了上述通用参数之外,还可以针对不同的模块进行定制,例如是否启用grafana、prometheus、tracing、weave-scope以及kiali等:

#
# addons configuration
#
grafana:
  enabled: true
  replicaCount: 1
  image: istio-grafana
  service:
    name: http
    type: ClusterIP
    externalPort: 3000
    internalPort: 3000
....
prometheus:
  enabled: true
  replicaCount: 1
  image:
    repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-prometheus
    tag: latest
....
tracing:
  enabled: true
  jaeger:
    enabled: true
....
weave-scope:
  enabled: true
  global:
    # global.image: the image that will be used for this release
    image:
      repository: weaveworks/scope
      tag: "1.9.0"
      # global.image.pullPolicy: must be Always, IfNotPresent, or Never
      pullPolicy: "IfNotPresent"
....
kiali:
  enabled: true
  replicaCount: 1
  image:
    repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-kiali
    tag: dev

修改之后,在右侧选择对应的集群、命名空间(建议新建一个namespace,如istio-system),指定发布名称,然后点击部署。

图片.png

几分钟之后,一套用于连接、管理以及安全化微服务的开放平台Istio实例就可以创建出来。

体验Istio

点击左侧的容器组,在右侧可以查看到刚创建的Istio相关容器组信息,如下所示:

图片.png

点击左侧的服务,在右侧可以查看到刚创建的Istio相关服务提供的访问地址,如下所示:

图片.png

默认参数配置下,会启用以下功能模块:

  • 智能路由
  • 故障注入
  • 流量转移
  • 分布式跟踪Open Tracing/Jaeger
  • 遥测指标数据收集Prometheus
  • 遥测指标数据可视化Grafana
  • 服务图Service Graph 与Weave支持
  • 服务网格监控Kiali

下一篇文章会通过一个官方示例来讲述,在阿里云Kubernetes容器服务基础之上,如何使用Istio进行微服务开发、管理、保护及监控等。

总结

我们可以利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
96 1
K8S的Service的LoadBanlance之Metallb解决方案
|
3月前
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
|
3月前
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
|
3月前
|
Kubernetes 监控 API
在k8S中,Metric Service是什么?
在k8S中,Metric Service是什么?
|
3月前
|
Kubernetes 负载均衡 网络协议
在k8S中,Headless Service是什么?
在k8S中,Headless Service是什么?
|
3月前
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪些?
在K8S中,Service的类型有哪些?
|
3月前
|
Kubernetes API 容器
在K8S中,Service的Nodeport端口范围?
在K8S中,Service的Nodeport端口范围?
|
3月前
|
Kubernetes 网络协议 网络安全
在K8S中,k8s中service访问有问题,该如何排查?
在K8S中,k8s中service访问有问题,该如何排查?
|
3月前
|
Kubernetes Perl 容器
在k8S中,Service怎么关联Pod的?
在k8S中,Service怎么关联Pod的?
|
3月前
|
Kubernetes 负载均衡 算法
在k8S中,Service分发后端的策略是什么?
在k8S中,Service分发后端的策略是什么?

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多