Helm 是一个用于自动化管理和发布 Kubernetes 软件的包管理系统。通过 Helm 可以在您的 Kubernetes 集群上快速部署安装 Higress 网关。
Higress 网关由控制面组件 higress-controller
和数据面组件 higress-gateway
组成。Istio 负责管理数据平面的 API 配置,higress-controller
负责管理控制平面的 API 配置。
helm repo add higress.io https://higress.io/helm-charts
helm install higress higress.io/higress -n higress-system --create-namespace
为避免从 Nginx Ingress 迁移过程中,覆盖 Ingress 对象的 status 字段,Higress 默认不会将入口 IP 写入 Ingress 的 status。
可以通过 --set enableStatus=true
启用此功能。
在集群内部署了多个网关时,可以基于 IngressClass 区分每个网关的职责范围。
可以通过 --set ingressClass=<name>
指定 Higress 监听哪些 Ingress。
当基于 K8s 命名空间进行业务系统隔离时,若需要对每个命名空间部署一套独立的网关,可以通过 watchNamespace 限制 Higress 监听此命名空间内的 Ingress。
可以通过 --set watchNamespace=<namespace>
指定。
Higress 网关可以通过Istio 统一管理数据平面的 API 配置。可以选择部署 Higress 发行的 Istio 版本,也可以选择 Istio 官方提供的标准版本。 两种模式下的能力对比可以参考Higress Anntotaion 支持说明。
这种模式下,需要更新 Higress 的部署参数:
helm upgrade higress -n higress-system --set global.enableMesh=true higress.io/higress
安装后,istiod
需要等待 Higress 完成部署完成,才会处于就绪状态。
helm repo add higress.io https://higress.io/helm-charts
helm install istio -n istio-system higress.io/istio --create-namespace
若 Higress 网关没有安装在默认的 higress-system
的命名空间,需要在安装 Higress Istio 时指定通过 --set global.higressNamespace=
指定命名空间,如:
helm repo add higress.io https://higress.io/helm-charts
helm install istio -n istio-system --set global.higressNamespace=foo higress.io/istio --create-namespace
请参考 Istio 官网的安装文档
与 Higress Istio 不同,标准版 Istio 不会从自动从 Higress Controller 获取配置,需要配置MeshConfig.ConfigSource
以通过 istioctl 部署为例:
# my-config.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
configSources:
# 当有多个配置来源时,需要显示指定 k8s 来源
- address: "k8s://"
# 假设 Higress 安装在 higress-system 命名空间
- address: "xds://higress-controller.higress-system:15051"
# 若在不同命名空间安装了多个 Higress ,可以继续添加
执行安装操作:
istioctl install -f my-config.yaml
先更新 Higress 的部署参数,并等待 Higress 就绪:
helm upgrade higress -n higress-system --set global.enableMesh=false higress.io/higress
kubectl wait -n higress-system deployment/higress-controller deployment/higress-gateway --for=condition=Available
删除 istio 以及对应的 crd
helm delete istio -n istio-system
kubectl delete ns istio-system
kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete