[云原生微服务架构](三)Istio安装
学习的最好方式就是亲自动手实践,要想学 Istio ,就先把 Istio 给装起来!
安装方式的选择
Istio 为我们提供了多种可选的安装方式:
安装方式 | 说明 | 推荐度 | 源码位置 |
---|---|---|---|
Istioctl | Istio 提供的命令行工具 | ⭐⭐⭐⭐⭐ | istio/istioctl[1] |
Istio Operator | Istio 提供的 Operator 控制器 | ⭐⭐ 直接使用 Operator 进行安装可能存在安全隐患,并且官方不会优先为其考虑新特性了 | istio/operator[2] |
Helm | Kubernetes 的包管理器 | ⭐⭐⭐ 此特性目前(2022-02-03)仍处于 alpha 阶段 | istio/manifests/charts[3] |
使用 Istioctl 和 Istio Operator 安装 Istio 时,底层使用的都是相同的 IstioOperator API
。
它们区别在于当使用 istioctl install
命令时,操作运行于管理员用户的安全上下文中;而直接使用 Operator 时,操作运行于集群内 pod 自己的安全上下文中。 为了避免此漏洞,需要确保 Operator 自身部署的足够安全,所以一般不建议直接使用 Operator 。
而不论是使用 Helm chart ,或是 Istioctl 、 Operator 安装 Istio 时,它们使用的底层 chart
都是相同的。
接下来我们将使用 Istioctl 来进行 Istio 的安装。
开始安装
首先需要将 Istioctl 工具下载到服务器,可以自行到 Istio release[4] 页面下载对应的平台版本。
也有个简单的办法,直接使用 Istio 提供的 downloadIstio 脚本一键下载:
$ curl -L https://istio.io/downloadIstio | sh -
不过该方式默认下载的是最新版本,推荐大家指定一下具体版本,以 1.12.1
为例,可以通过传递 ISTIO_VERSION
参数:
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.12.1 sh -
执行完成后会在当前位置生成 istio-1.12.1
目录,其中包括以下内容(具体版本可能存在差异):
如果以上方法无法下载推荐直接下载tar包到本地
下载地址link.zhihu.com/?target=https%3A//g...
![]
bin
: 存放istioctl
二进制文件manifests
: istio 的内置chart
目录,默认使用这些内置 chart 生成安装清单,安装过程也可以自行设置--manifests=other_manifests/
参数来指定外部 chartsamples
: istio 提供的一些示例应用程序tools
: 一些工具,如certs
用于生成证书
为了方便使用 istioctl
,将 bin
目录添加到我们的环境变量中:
$ export PATH=$PWD/bin:$PATH
检查一下 istio 环境以及版本信息:
$ istioctl version
no running Istio pods in "istio-system"
1.12.1
到这,istioctl
的安装就完成了,我们还要继续借助 istioctl
来完成 Istio
的安装,这才是我们的最终目的。
在继续安装 Istio
之前,我们先要了解下 Istio 为我们提供的几个内置的配置文件,这些配置文件提供了对 Istio 控制平面和 Istio 数据平面 Sidecar 的定制内容。
要想知道有哪几个内置的配置文件,可以运行以下命令:
$ istioctl profile list
Istio configuration profiles:
default
demo
empty
external
minimal
openshift
preview
remote
其中几个主要的配置文件:
配置文件 | 核心组件 | 说明 |
---|---|---|
default | istio-ingressgateway、istiod | 根据 IstioOperator API 的默认设置启动组件。可用于生产部署。 |
demo | istio-egressgateway、istio-ingressgateway、istiod | 旨在展示 Istio 的功能,启用了高级别的追踪和访问日志(需要具有适度的资源),适合学习使用。 |
minimal | istiod | 与默认配置文件相同,但只安装了控制平面组件。 |
remote | - | 配置 Multicluster Mesh 的 Remote Cluster。 |
empty | - | 不部署任何东西。可以作为自定义配置的基本配置文件。 |
preview | istio-ingressgateway、istiod | 实验性。用于探索 Istio 的新功能。不确保稳定性、安全性和性能。 |
当你足够熟悉 Istio 后,你可以自定义配置文件。但在此之前,我们还是先以 demo
来入门吧。
我们可以浏览一下 demo
的配置信息:
$ istioctl profile dump demo
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
components:
base:
enabled: true
cni:
enabled: false
egressGateways:
- enabled: true
k8s:
resources:
requests:
cpu: 10m
memory: 40Mi
name: istio-egressgateway
ingressGateways:
- enabled: true
......
开始使用 demo
配置文件进行 Istio 安装,有两种方式:
1、直接通过在命令行传递配置名称
$ istioctl install --set profile=demo
2、通过 -f
传递配置文件(推荐方式)
$ vi my-demo-config.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: demo
$ istioctl install -f my-demo-config.yaml
完整的 API 记录可以参考 IstioOperator API 文档[5]。
耐心等待,出现如下结果:
This will install the Istio 1.12.1 demo profile with ["Istio core" "Istiod" "Ingress gateways" "Egress gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
Making this installation the default for injection and validation.
Thank you for installing Istio 1.12. Please take a few minutes to tell us about your install/upgrade experience! https://forms.gle/xxx
到此,Istio
的安装就完成了。
再次检查一下 istio 环境以及版本信息:
$ istioctl version
client version: 1.12.1
control plane version: 1.12.1
data plane version: 1.12.1 (2 proxies)
也可以对其进行验证:
$ istioctl verify-install -f my-demo-config.yaml
......
Checked 14 custom resource definitions
Checked 3 Istio Deployments
✔ Istio is installed and verified successfully
查看 Istio
在 Kubernetes 部署了什么:
$ kubectl -n istio-system get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
istio-egressgateway 1/1 1 1 9m49s
istio-ingressgateway 1/1 1 1 9m49s
istiod 1/1 1 1 10m
为了下面示例项目的演示,我们先准备一个命名空间 istio-app
,为其添加标签,指示在此命名空间部署应用时,Istio 自动给 Pod 注入 Envoy 边车代理:
$ kubectl create ns istio-app
namespace/istio-app created
$ kubectl label ns istio-app istio-injection=enabled
namespace/istio-app labeled
卸载
$ istioctl manifest generate -f my-demo-config.yaml | kubectl delete --ignore-not-found=true -f -
$ kubectl delete ns istio-system
$ kubectl label ns istio-app istio-injection-
$ kubectl delete ns istio-app
部署遥测应用插件
kubectl apply -n istio-system -f samples/addons
运行kiali
istioctl dashboard kiali
为了可以将 kiali 暴露在 k8s 集群外访问,需要将 kiali的 ClusterIP 服务类型更改为 NodePort。执行语句如下
kubectl patch svc -n istio-system kiali -p '{"spec":{"type": "NodePort"}}'
本作品采用《CC 协议》,转载必须注明作者和本文链接