依赖项目
Ingress-NGINX 部署指南
Crater 使用 Ingress-NGINX 控制器来管理服务的外部访问,作为 HTTP 和 HTTPS 流量的主要入口点。
部署
选项 1:不使用 LoadBalancer(例如裸金属或开发集群)
在不支持 LoadBalancer 服务类型的集群中,我们建议启用 hostNetwork
模式。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--version 4.11.3 \
--set controller.image.registry="crater-harbor.act.buaa.edu.cn/registry.k8s.io" \
--set controller.admissionWebhooks.patch.image.registry="crater-harbor.act.buaa.edu.cn/registry.k8s.io" \
--set controller.hostNetwork=true \
--set controller.dnsPolicy=ClusterFirstWithHostNet \
--set controller.healthCheckHost="10.109.80.4" \
--set 'controller.nodeSelector.kubernetes\.io/hostname=cnode1' \
--set "controller.tolerations="
🔧 根据你的集群节点配置调整节点选择器、容忍度和 healthCheckHost。
选项 2:使用 MetalLB(Crater 推荐) 在我们的生产集群中,Crater 使用 MetalLB 在 Layer 2 模式下分配内部 IP。Ingress 控制器作为 LoadBalancer 服务部署,获得一个内部 IP。
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--version 4.11.3 \
--set controller.image.registry="crater-harbor.act.buaa.edu.cn/registry.k8s.io" \
--set controller.admissionWebhooks.patch.image.registry="crater-harbor.act.buaa.edu.cn/registry.k8s.io" \
--set controller.allowSnippetAnnotations=true
📌 此配置使用 MetalLB 池中的一个内部 IP,并支持在受信任网络(例如大学内网)中的服务发现。
你可以通过以下命令验证外部 IP 的分配:
kubectl get svc -n ingress-nginx
示例:
NAME TYPE EXTERNAL-IP PORT(S)
ingress-nginx-controller LoadBalancer 192.168.100.243 80:31234/TCP,443:31235/TCP
版本兼容性说明
我们目前 将 Ingress-NGINX 版本固定为 4.11.3
,因为 Crater 的 Ingress 注解尚未与版本 ≥ 4.12.0
兼容。尝试使用新版本将导致路由重写错误。
卸载
要移除 Ingress 控制器:
helm uninstall ingress-nginx -n ingress-nginx