[云原生微服务架构](三)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/ 参数来指定外部 chart
  • samples : 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 协议》,转载必须注明作者和本文链接
你还差得远呐!
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!