Skip to content

alibaba/higress

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
pkg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Higress
Next-generation Cloud Native Gateway

Build Status license

官网   |   文档   |   博客   |   开发指引  

English | 中文

Higress 是基于阿里内部两年多的 Envoy Gateway 实践沉淀,以开源 IstioEnvoy 为核心构建的下一代云原生网关。Higress 实现了安全防护网关、流量网关、微服务网关三层网关合一,可以显著降低网关的部署和运维成本。

arch

Summary

使用场景

  • Kubernetes Ingress 网关:

    Higress 可以作为 K8s 集群的 Ingress 入口网关, 并且兼容了大量 K8s Nginx Ingress 的注解,可以从 K8s Nginx Ingress 快速平滑迁移到 Higress。

    支持 Gateway API 标准,支持用户从 Ingress API 平滑迁移到 Gateway API。

  • 微服务网关:

    Higress 可以作为微服务网关, 能够对接多种类型的注册中心发现服务配置路由,例如 Nacos, ZooKeeper, Consul, Eureka 等。

    并且深度集成了 Dubbo, Nacos, Sentinel 等微服务技术栈,基于 Envoy C++ 网关内核的出色性能,相比传统 Java 类微服务网关,可以显著降低资源使用率,减少成本。

  • 安全防护网关:

    Higress 可以作为安全防护网关, 提供 WAF 的能力,并且支持多种认证鉴权策略,例如 key-auth, hmac-auth, jwt-auth, basic-auth, oidc 等。

核心优势

  • 生产等级

    脱胎于阿里巴巴2年多生产验证的内部产品,支持每秒请求量达数十万级的大规模场景。

    彻底摆脱 reload 引起的流量抖动,配置变更毫秒级生效且业务无感。

  • 平滑演进

    支持 Nacos/Zookeeper/Eureka 等多种注册中心,可以不依赖 K8s Service 进行服务发现,支持非容器架构平滑演进到云原生架构。

    支持从 Nginx Ingress Controller 平滑迁移,支持平滑过渡到 Gateway API,支持业务架构平滑演进到 ServiceMesh。

  • 兼收并蓄

    兼容 Nginx Ingress Annotation 80%+ 的使用场景,且提供功能更丰富的 Higress Annotation 注解。

    兼容 Ingress API/Gateway API/Istio API,可以组合多种 CRD 实现流量精细化管理。

  • 便于扩展

    提供 Wasm、Lua、进程外三种插件扩展机制,支持多语言编写插件,生效粒度支持全局级、域名级,路由级。

    插件支持热更新,变更插件逻辑和配置都对流量无损。

Quick Start

本地环境

第一步、 安装 kubectl & kind

MacOS:

curl -Lo ./kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
# for Intel Macs
[ $(uname -m) = x86_64 ]&& curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-darwin-amd64
# for M1 / ARM Macs
[ $(uname -m) = arm64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-darwin-arm64
chmod +x ./kind ./kubectl
mv ./kind ./kubectl /some-dir-in-your-PATH/

Windows 中使用 PowerShell:

curl.exe -Lo kubectl.exe https://storage.googleapis.com/kubernetes-release/release/$(curl.exe -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.17.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
Move-Item .\kubectl.exe c:\some-dir-in-your-PATH\kubectl.exe

Linux:

curl -Lo ./kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64
chmod +x ./kind ./kubectl
sudo mv ./kind ./kubectl /usr/local/bin/kind

第二步、 创建并启用 kind

首先创建一个集群配置文件: cluster.conf

# cluster.conf
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP

Mac & Linux 系统执行:

kind create cluster --name higress --config=cluster.conf
kubectl config use-context kind-higress

Windows 系统执行:

kind.exe create cluster --name higress --config=cluster.conf
kubectl.exe config use-context kind-higress

第三步、 安装 istio & higress

kubectl create ns istio-system
helm install istio -n istio-system oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/charts/istio-local
kubectl create ns higress-system
helm install higress -n higress-system oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/charts/higress-local

第四步、 创建 Ingress 资源并测试

kubectl apply -f https://github.com/alibaba/higress/releases/download/v0.5.2/quickstart.yaml

测试 Ingress 生效:

# should output "foo"
curl localhost/foo
# should output "bar"
curl localhost/bar

卸载资源

kubectl delete -f https://github.com/alibaba/higress/releases/download/v0.5.2/quickstart.yaml

helm uninstall istio -n istio-system

helm uninstall higress -n higress-system

kubectl delete ns istio-system

kubectl delete ns higress-system

生产环境

第一步、 安装 istio

可以选择安装 higress 发行的 istio 版本:

kubectl create ns istio-system
helm install istio -n istio-system oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/charts/istio

或者选择安装官方 istio 版本 (将失去部分能力,例如通过 Ingress 注解实现限流的功能):

https://istio.io/latest/docs/setup/install

第二步、 安装 higress

kubectl create ns higress-system
helm install higress -n higress-system oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/charts/higress 

第三步、 创建 Ingress 资源并测试

假设在 default 命名空间下已经部署了一个 test service,服务端口为 80 ,则创建下面这个 K8s Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-example
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80  

测试能访问到该服务:

curl "$(k get svc -n higress-system higress-gateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"/foo -H 'host: foo.bar.com'

卸载资源

helm uninstall istio -n istio-system

helm uninstall higress -n higress-system

kubectl delete ns istio-system

kubectl delete ns higress-system

社区

感谢

如果没有 Envoy 和 Istio 的开源工作,Higress 就不可能实现,在这里向这两个项目献上最诚挚的敬意。

联系我们

contact-us