Istioldie 1.18 / 安装指南
基于Kubernetes的Istio的微服务架构需要安装以下组件:
- Istio控制平面组件:包括Istio-Pilot、Istio-Policy、Istio-Telemetry等。这些组件负责微服务的管理和配置,如流量管理、策略执行、遥测数据收集等。
- 数据平面组件:主要是Envoy代理,它被部署为Sidecar容器与每个微服务一同运行。Envoy负责微服务之间的网络通信,实现负载均衡、服务发现、故障恢复等功能。
- 可选的增值组件:如Jaeger用于调用链追踪,Kiali用于服务网格的可视化观察,Prometheus和Grafana用于监控和度量数据收集和展示。这些组件能够增强Istio的观测性,帮助开发者更好地理解和管理微服务网格。
应用程序要求
参考:Istioldie 1.18 / 应用程序要求
在部署启用 Istio 的应用程序时,需要特别注意 Istio Sidecar 模型造成的影响。
Pod 要求
作为 Istio 服务网格中的一部分,Kubernetes 集群中的 Pod 和 Service 必须满足以下要求:
-
Service 关联:不管一个 Pod 是否对外暴露端口,每个 Pod 必须至少属于一个 Kubernetes Service。假如一个 Pod 同时属于多个 Kubernetes Service,那么它不能在不同 Service 的端口号上使用不同的协议(比如 HTTP 和 TCP)。
-
应用 UID:确保您的 Pod 不会被 ID(UID)为
1337
的用户运行应用,因为1337
是为 Sidecar 代理保留的。 -
NET_ADMIN
和NET_RAW
权限:如果您的集群强制执行了 Pod 安全策略,必须给 Pod 配置NET_ADMIN
和NET_RAW
权限。如果您使用 Istio CNI 插件,可以不配置。 -
要列出服务账户的权限,请在下面的命令中用你的值替换
<your namespace>
和<your service account>
。
-
带有 app 和 version 标签(label)的 pod:我们建议显式地给 Deployment 加上
app
和version
标签。给使用 KubernetesDeployment
部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。-
app
标签:每个部署配置应该有一个不同的app
标签并且该标签的值应该有一定意义。app
label 用于在分布式追踪中添加上下文信息。 -
version
标签:这个标签用于在特定方式部署的应用中表示版本。
-
Istio 使用的端口
Istio sidecar 代理(Envoy)使用以下端口和协议。
Istio 控制平面(istiod)使用以下端口和协议。
使用 Helm 安装
参考:Istioldie 1.18 / 使用 Helm 安装
请遵循本指南使用 Helm 安装和配置 Istio 网格。
先决条件
-
执行任何必要的特定于平台的设置。
-
检查 Pod 和服务的要求。
-
安装 Helm 客户端 3.6 或更高的版本。
helm version
4.配置 Helm 存储库:
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
安装步骤
本节介绍使用 Helm 安装 Istio 的过程。Helm 安装的一般语法是:
Helm 安装的一般语法是:
$ helm install <release> <chart> --namespace <namespace> --create-namespace [--set <other_parameters>]
该命令指定的变量如下:
<chart>
一个打好包的 Chart 路径,也可以是一个未打包的 Chart 目录或 URL。<release>
一个用于标识和管理安装后的 Helm Chart 的名称。<namespace>
要安装 Chart 的命名空间。
1、为 Istio 组件,创建命名空间 istio-system
:
kubectl get namespaces
kubectl create namespace istio-system
2、安装 Istio base chart,它包含了集群范围的自定义资源定义 (CRD),这些资源必须在部署 Istio 控制平面之前安装:
helm install istio-base istio/base -n istio-system
3. 使用 helm ls
命令验证 CRD 的安装情况:
helm ls -n istio-system
在输出中找到 istio-base
的条目,并确保状态已被设置为 deployed
。
4.安装 Istio discovery chart,它用于部署 istiod
服务:
helm install istiod istio/istiod -n istio-system --wait
5、验证 Istio discovery chart 的安装情况:
helm ls -n istio-system
6、获取已安装的 Helm Chart 的状态以确保它已部署:
helm status istiod -n istio-system
7、检查 istiod
服务是否安装成功,其 Pod 是否正在运行:
kubectl get deployments -n istio-system --output wide
8、(可选)安装 Istio 的入站网关:
kubectl create namespace istio-ingress
helm install istio-ingress istio/gateway -n istio-ingress --wait
至于可用的配置项,你可以通过使用 helm show values istio/<chart>
来找到配置。 例如:helm show values istio/gateway
。
卸载
您可以通过卸载上述安装的 chart,以便卸载 Istio 和及其组件。
helm delete istio-ingress -n istio-ingress
kubectl delete namespace istio-ingress
helm delete istiod -n istio-system
helm delete istio-base -n istio-system
kubectl delete namespace istio-system
(可选)删除 Istio 安装的 CRD
永久删除 CRD 会移除您在集群中已创建的所有 Istio 资源。 用下面命令永久删除集群中安装的 Istio CRD:
kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete
其中 kubectl get crd -oname | grep --color=never 'istio.io'
其他
kubectl get pods -n istio-system
kubectl get services -n istio-system
----------------------------------------------------------------------------------------------------
开始使用 Istio 和 Kubernetes Gateway API
大多数 Kubernetes 集群上默认并未安装 Kubernetes Gateway API CRD, 因此需要先确保安装了 Kubernetes Gateway API CRD,再使用 Gateway API:
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.6.2" | kubectl apply -f -; }