Helm is a package manager for Kubernetes used in software management and deployment. You can use Helm to perform a quick install of Higress Gateway in your Kubernetes cluster.
Higress Gateway consists of a control plane component higress-controller
and a data plane component higress-gateway
. It uses Istio to management API configurations of the data plane, and higress-controller
to manage API configurations of the control plane.
helm repo add higress.io https://higress.io/helm-charts
helm install higress higress.io/higress -n higress-system --create-namespace
When migrating from Nginx Ingress, in order to avoid status field of Ingress objects being overwritten, Higress won't write the entry IP to the status field of the corresponding Ingress object.
You can use --set enableStatus=true
enable to feature.
If there are multiple gateway instances deployed in the cluster, you can use IngressClass to distinguish the scope of each gateway instance.
You can use --set ingressClass=<name>
to let Higress know which Ingress instances it shall listen to.
When isolating different business systems using K8s namespace, if each namespace requires a standalone gateway instance, you can use watchNamespace
to confine the Ingress watching of Higress within the given namespace.
You can use --set watchNamespace=<namespace>
to set this value.
Higress Gateway can use Istio to manage API configurations of the data plane. You can choose to deploy the custom version published by Higress, or the standard version provided by Istio authors. For the feature differences of these two modes, you can check out the Higress Anntotaion Configuration Manual.
In this mode, you should update the deployment options like this:
helm upgrade higress -n higress-system --set global.enableMesh=true higress.io/higress
After installation, istiod
will be ready once Higress is fully deployed.
helm repo add higress.io https://higress.io/helm-charts
helm install istio -n istio-system higress.io/istio --create-namespace
If Higress Gateway is not installed to the default namespace of higress-system
, you need to use --set global.higressNamespace=
to specify the actual namespace when installing Higress Istio. For example:
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
Please refer to the Installation Manual on the official website of Istio.
Unlike Higress Istio, the standard version of Istio won't try to retrieve configurations from Higress Controller by default. You need to configure MeshConfig.ConfigSource for this.
Here we use deploying with istioctl as an example:
# my-config.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
configSources:
# If there are multiple config sources, we need to add the k8s source explicitly.
- address: "k8s://"
# Assume Higress is installed in the namespace of higress-system
- address: "xds://higress-controller.higress-system:15051"
# If there are multiple Higress instances installed in different namespaces, you can add them below.
Execute the installation command:
istioctl install -f my-config.yaml
First update the deployment parameters of Higress and wait for Higress to be ready:
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
Delete istio and the corresponding CRDs.
helm delete istio -n istio-system
kubectl delete ns istio-system
kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete