首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Istio 0.8 的 Helm Chart 解析

Istio 0.8 的 Helm Chart 解析

作者头像
崔秀龙
发布2019-07-23 11:23:44
6160
发布2019-07-23 11:23:44
举报
文章被收录于专栏:伪架构师伪架构师

儿童节期间,拖拉了一个多月的 Istio 0.8 正式发布了,这可能是 Istio 1.0 之前的最后一个 LTS 版本,意义重大。

新版本中,原来的 Kubernetes 安装文件 install/kubernetes/istio.yaml,变成了 install/kubernetes/istio-demo.yaml,是的,你没看错,这个 LTS 的安装文件名字叫 demo。查看了一下文档,大概察觉到不靠谱的 Istio 发布组的意图了:这个项目的组件相对比较复杂,原有的一些选项是靠 ConfigMap 以及 istioctl 分别调整的,现在通过重新设计的 Helm Chart,安装选项用 values.yml 或者 helm 命令行的方式来进行集中管理了。下面就由看看 Istio 的 Helm Chart 的安装部署及其结构。

使用 Helm 安装 Istio

安装包内的 Helm 目录中包含了 Istio 的 Chart,官方提供了两种方法:

  • 用 Helm 生成 istio.yaml,然后自行安装。
  • 用 Tiller 直接安装。

很明显,两种方法并没有什么本质区别。例如第一个命令:

helm template install/kubernetes/helm/istio \
--name istio --namespace  \
istio-system > $HOME/istio.yaml

这里说的是使用 install/kubernetes/helm/istio 目录中的 Chart 进行渲染,生成的内容保存到 $HOME/istio.yaml 文件之中。而第二个命令

helm template install/kubernetes/helm/istio \
--name istio --namespace istio-system \
--set sidecarInjectorWebhook.enabled=false > $HOME/istio.yaml

只是设置了 Chart 中的一个变量 sidecarInjectorWebhook.enabled 为 False。从而禁止自动注入属性生效。

我们照猫画虎,看看命令二的结果提交到 Kubernetes 中会发生什么事情。

helm template install/kubernetes/helm/istio --name istio \
--namespace istio-system --set sidecarInjectorWebhook.enabled=false > $HOME/istio.yamlkubectl create namespace istio-system
kubectl create -f $HOME/istio.yaml

根据不同的网络情况,可能需要几分钟的等待,最后会看到这些 Pod 在运行:

istio-citadel-ff5696f6f-h4rdz istio-cleanup-old-ca-rp5p6 istio-egressgateway-58d98d898c-5jnpz istio-ingress-6fb78f687f-wsl5q istio-ingressgateway-6bc7c7c4bc-hhrh7 istio-mixer-post-install-d2kl5 istio-pilot-6c5c6b586c-dqv2w istio-policy-5c7fbb4b9f-xmv6f istio-statsd-prom-bridge-6dbb7dcc7f-27tx7 istio-telemetry-54b5bf4847-9gpr7 prometheus-586d95b8d9-gb846

  1. 过去的 istio-ca 现已更名 istio-citadel。
  2. istio-cleanup-old-ca 是一个 job,用于清理过去的 Istio 遗留下来的 CA 部署(包括 sa、deploy 以及 svc 三个对象)。
  3. istio-mixer-post-install 同样也是一个 job,和上面的 Job 一样,简单的调用 kubectl 创建第三方资源,从而避免了之前的 CDR 需要重复创建的尴尬状况。
  4. egressgateway、ingress 以及 ingressgateway,可以看出边缘部分的变动很大,以后会另行发文。
  5. 和从前不同,缺省已经打开了监控界面。

Helm Chart 的安装配置

下面的配置项目,都可以使用 helm 的 --set key=value 来设置,可以重复使用,用来设置多个值。

选项

说明

缺省值

global.hub

绝大部分镜像所在的镜像库地址

docker.io/istionightly

global.tag

Istio 使用的绝大部分镜像的 Tag

circleci-nightly

global.proxy.image

指定 Proxy 的镜像名称

proxyv2

global.imagePullPolicy

镜像拉取策略

IfNotPresent

global.controlPlaneSecurityEnabled

控制面是否启动 mTLS

false

global.mtls.enabled

服务间是否缺省启用 mTLS

false

global.mtls.mtlsExcludedServices

禁用 mTLS 的 FQDN 列表

- kubernetes.default.svc.cluster.local

global.rbacEnabled

是否创建 RBAC 规则

true

global.refreshInterval

Mesh 发现间隔

10s

global.arch.amd64

amd64 架构中的调度策略,0:never;1: least preferred;2:no preference;3:most preferred

2

global.arch.s390x

amd64 架构中的调度策略,0:never;1: least preferred;2:no preference;3:most preferred

2

global.arch.ppc64le

amd64 架构中的调度策略,0:never;1: least preferred;2:no preference;3:most preferred

2

galley.enabled

是否安装 Galley 用于进行服务端的配置验证,需要 1.9 版本以上的 Kubernetes

false

上面的内容来自官方文档,其实这是不符合实际情况的(Istio 用户的日常)。在 install/kubernetes/helm/istio/values.yaml 中,包含这一发行版本中的所有的缺省值。可以直接修改或者新建 values.yaml,并在 helm 命令行使用 -f my-values.yaml 参数来生成自行定制的 istio.yaml

解读 Istio Helm Chart 中的模块

打开 Istio 的 Chart 之后,发现其中并没有任何组件的内容,只有两个 Configmap 对象的模板。其安装主体再次很非主流的通过依赖 Chart 的方式实现了完全的模块化。因此这个 Chart 的主体,实际上是 requirements.yaml,打开这个文件,会看到规规矩矩的列出很多模块,例如:

- name: sidecarInjectorWebhook
version: 0.8.0
# repository: file://../sidecarInjectorWebhook
condition: sidecarInjectorWebhook.enabled

这表明在 sidecarInjectorWebhook 取值为 enabled 的时候,就渲染这一模板。因此这里可以看做是模块的启用停用的控制点。这里列出的模块包括:

模块

描述

egressgateway

外发流量网关

galley

在 K8S 服务端验证 Istio 的 CRD 资源的合法性

grafana

Dashboard

ingress

Ingress Controller

ingressgateway

Ingress Gateway

mixer

Mixer

pilot

Pilot

prometheus

Prometheus

security

安全相关内容

servicegraph

调用关系图

sidecarInjectorWebhook

自动注入

tracing

Zipkin Jeager 的跟踪服务

下面逐一做一下简要说明

egressgateway

外发通信的网关。

他的设置保存在 values.yamlegressgateway 一节中(都是保存在同名分支下,后面不再重复)。部署内容包括:

  • Deployment 和 Service:一个 proxy。
  • HPA
  • RBAC 相关内容

可定制项目包括:

  • 服务端口和类型
  • HPA 实例数量上下限
  • 资源限制

galley

之前的 istio 版本中,只能通过 istioctl 验证 Istio 相关 CRD 的有效性,这个模块提供一个在服务端验证 CRD 的方法,他的部署内容包含:

  • Deployement 和 Service。
  • RBAC 相关
  • 用于 CRD 校验的 ValidatingWebhookConfiguration 对象。

校验目标包含 Pilot(例如 destinationpolicies 和 routerules) 和 Mixer(例如 memquotas 和 prometheuses) 两类 CRD。

grafana

一个带有 Istio 定制 Dashboard 的 Grafana 封装。

实际上将其镜像中的 Dashboard 复制出来就可以在其他 Grafana 实例上运行了。

定制内容的 grafana.ingress.* 中包含 Ingress 的配置,用于外网访问。

ingress

Istio 的 Ingress Controller

具体部署内容和 egresscontroller 基本一致。

ingressgateway

0.8.0 新增功能,为 Ingress 通信提供 Istio rules/destination 等特性。

部署内容和 ingress 类似。

mixer

Mixer 负责的是遥测和前置检查,他的 Chart 相对比较复杂,部署内容包括:

  • 和前面的版本不同,Mixer 的部署分成了两个部分,分别是 Policy 和 Telemetry 两个 Deployment 对象。
  • Service 也同样分成两个,其中 telemetry service 多了一个 prometheus 端口
  • crds.yaml 中包含了 mixer 所支持的所有 crd 定义(例如 memquotas 和 prometheuses)。
  • create-custom-resources-job.yaml 中包含了用于创建 crd 的 Job 对象。

pilot

Pilot 承上启下,负责服务发现和向 Proxy 下发配置。除了常规的 Deployment 和 Service 之外,还包含了 crds.yaml,用于声明 CRD 资源类型(例如 destinationpolicies 和 routerules)。

prometheus

这个组件跟前面的 Grafana 类似,也是一个预定义的镜像。这个模板中的 Configmap 就是 Prometheus 的抓取配置,可以直接用到其他的 Prometheus 实例之中。

security

旧版本中的 Istio-ca

Security 部分的部署内容包括:

  • RBAC
  • Job:使用 kubectl 清理旧版本 istio-ca 实例。
  • Deployment,原 CA。
  • Service:开放两个端口,分别服务于 http 和 gRPC。

servicegraph

Service Graph 支持,和 Grafana 基本一致。

sidecarInjectorWebhook

这一部分的功能是自动为 K8S 对象注入 Envoy。主要包含:

  • Deployment 和 Service
  • RBAC 相关
  • 一个 MutatingWebhookConfiguration 对象,会监听 Pod 的创建事件,用于自动注入。

tracing

Jeager 的跟踪支持,总体情况跟 Prometheus 和 Grafana 等监控组件类似,配置项和暴露服务方面稍有区别:

  • 配置中包含 Jaeger 的环境变量的控制。
  • 开启 jaeger 开关,会启用 Jaeger 的几个服务端口。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Helm 安装 Istio
    • Helm Chart 的安装配置
    • 解读 Istio Helm Chart 中的模块
      • egressgateway
        • galley
          • grafana
            • ingress
              • ingressgateway
                • mixer
                  • pilot
                    • prometheus
                      • security
                        • servicegraph
                          • sidecarInjectorWebhook
                            • tracing
                            相关产品与服务
                            容器服务
                            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档