跳转到内容

Helm 安装

Helm 是 Nantian Gateway 推荐的安装方式。Chart 把控制面、数据面和管理界面打包进一次发布,默认值覆盖了大多数场景,需要覆盖的值也都能在 values.yaml 里找到。

Chart 托管在 Cloudflare Pages,要求 Helm 3.x。

安装前请确保集群已安装 Gateway API CRD:

Terminal window
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.1/standard-install.yaml

验证 CRD 已就绪:

Terminal window
kubectl get crd gateways.gateway.networking.k8s.io

首先添加 Helm 仓库:

Terminal window
helm repo add nantian-gw https://chart.nantian.dev
helm repo update

最简单的安装方式就是跑一行命令。它会自动创建 nantian-gw 命名空间,给每个组件部署两个副本,然后注册 GatewayClass:

Terminal window
helm install nantian-gw nantian-gw/nantian-gw --namespace nantian-gw --create-namespace

安装完成之后,你会拿到一套完整的运行环境:控制面两个副本(有主备选举)、数据面两个副本(都接流量)、管理界面一个副本。控制面和数据面之间通过 gRPC 双向流通信,默认用的是 18080 端口。

Chart 的 values.yaml 注释写得很详细,下面是最常用的几个段。完整的默认值运行 helm show values 就能看到。

全局配置:

global:
imageRegistry: "" # 所有镜像的前缀,适合离线/私有仓库场景
imagePullSecrets: [] # 私有仓库的拉取凭据
commonLabels: {} # 打在全部资源上的标签

命名空间:

namespace:
create: true # 让 Helm 帮你建命名空间
name: "nantian-gw" # 命名空间名字

控制面:

controlplane:
enabled: true
replicas: 2
image:
repository: "nantian-controlplane"
tag: "latest" # 不填就用 Chart.appVersion
pullPolicy: Always
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
config:
grpcAddr: ":18080"
adminAddr: ":18081"
metricsAddr: ":18082"
healthProbeAddr: ":18083"
syncPeriod: "30s"
leaderElection:
enabled: true
id: "nantian-controlplane-leader"
leaseDuration: "15s"
renewDeadline: "10s"
retryPeriod: "2s"
grpcTLS:
enabled: false
existingSecret: ""
requireClientCert: false

数据面:

dataplane:
enabled: true
replicas: 2
image:
repository: "nantian-dataplane"
tag: "latest"
pullPolicy: Always
resources:
requests:
cpu: "1"
memory: "256Mi"
limits:
memory: "1Gi"

如果你用私有镜像仓库,或者需要指定版本号:

Terminal window
helm install nantian-gw nantian-gw/nantian-gw \
--set global.imageRegistry=ghcr.io/nantian-gw \
--set controlplane.image.tag=v0.2.0 \
--set dataplane.image.tag=v0.2.0

在只需要控制面和数据面的场景下,可以关掉管理界面:

Terminal window
helm install nantian-gw nantian-gw/nantian-gw \
--set dashboard.enabled=false

把网关装到一个已存在的命名空间里:

Terminal window
helm install nantian-gw nantian-gw/nantian-gw \
--set namespace.create=false \
--set namespace.name=my-gateway-ns \
-n my-gateway-ns

生产环境必须把控制面和数据面之间的 gRPC 通信加密起来。提前把证书存成 Secret,再引用:

Terminal window
helm install nantian-gw nantian-gw/nantian-gw \
--set controlplane.grpcTLS.enabled=true \
--set controlplane.grpcTLS.existingSecret=nantian-grpc-tls \
--set controlplane.grpcTLS.requireClientCert=true

TLS 相关的完整配置参考 TLS / mTLS 一节。

Helm 跑完之后,确认所有组件都起起来了:

Terminal window
# 看 Pod 状态
kubectl get pods -n nantian-gw
# 看 GatewayClass 有没有被领走
kubectl get gatewayclass nantian-gw
# 看所有创建出来的资源
kubectl get all -n nantian-gw

正常情况下你会看到五个 Pod:两个控制面、两个数据面、一个管理界面,全部 Running,READY 列显示 1/1。GatewayClass 的 ACCEPTED 列应该显示 True,说明控制面已经认领了这个类。

不用了就清干净:

Terminal window
helm uninstall nantian-gw -n nantian-gw

Helm 卸载不会自动删命名空间。如果需要彻底清掉:

Terminal window
kubectl delete namespace nantian-gw