Helm 快速部署 ingress-nginx
概述
Nginx Ingress Controller 是基于高性能 Nginx 反向代理实现的 Kubernetes Ingress 控制器,也是最常用的开源 Ingress 实现。本文介绍如何在 TKE 环境中自建 Nginx Ingress Controller,主要使用 Helm 进行快速安装,提供一些 values.yaml
配置指引。
前提条件
- 创建了 TKE 集群。
- 安装了 helm。
- 配置了 TKE 集群的 kubeconfig,且有权限操作 TKE 集群(参考 连接集群)。
版本选择
查看 TKE K8S 版本号:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
10.140.16.14 Ready <none> 4h46m v1.28.3-tke.5
10.140.16.15 Ready <none> 4h49m v1.28.3-tke.5
根据 TKE K8S 1.28.3 版本,来选择 ingress-nginx 的 Supported Versions table:
这里选择 Ingress-NGINX version v1.11.2
src/components/HelloDocusaurus.js
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}
获取离线 chart 包
为什么要获取离线 chart 包?
- 远程 Repo 位于境外 GitHub ,从境内访问容易超时。
- 生产环境需要严格固定开源组件版本号
添加 helm repo 仓库:
# 添加 helm repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# 更新
helm repo update
查询可用的 ingress-nginx 的 chart 包版本:
#包
$ helm search repo ingress-nginx
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 4.11.2 1.11.2 Ingress controller for Kubernetes using NGINX a...
下载 chart 包:
helm pull ingress-nginx/ingress-nginx
解压获取默认的 values.yaml
模板参数配置文件:
tar xvf ingress-nginx-4.11.2.tgz
cp ingress-nginx-4.11.2/values.yaml . # 拷贝 values.yaml
cp ingress-nginx-4.11.2/values.yaml ./values.yaml.default # 保留一个默认的配置文件
删除刚刚解压出来的目录,后面部署直接使用刚刚下载的 ingress-nginx-4.11.2.tgz
包:
rm -rf ingress-nginx-4.11.2
在生产环境中:
不建议使用 helm --set
命令行!要将 values.yml
持久化配置并上传到 GitLab 仓库进行保存,好处:
- 利用 Git 的版本控制,记录每一次配置变更过程。
- 与他人的协作上,能够快速熟悉掌握一个开源组件的完整生命周期。
配置 vaules.yaml
修改镜像地址
ingress-nginx 依赖的镜像在 registry.k8s.io 这个 registry 下,国内网络环境无法拉取,可替换为 docker hub 中的 mirror 镜像。修改 values.yml
中镜像地址:
controller: # 以下配置将依赖镜像替换为了 docker hub 上的 mirror 镜像以保证在国内环境能正常拉取
image:
registry: docker.io
image: k8smirror/ingress-nginx-controller
admissionWebhooks:
patch:
image:
registry: docker.io
image: k8smirror/ingress-nginx-kube-webhook-certgen
defaultBackend:
image:
registry: docker.io
image: k8smirror/defaultbackend-amd64
opentelemetry:
image:
registry: docker.io
image: k8smirror/ingress-nginx-opentelemetry
资源配额
- 副本数:2个及以上
- 资源配额:生产环境严格按照 CPU:内存 1:1 的比例分配
- CPU内存:根据实际业务量与集群节点配置进行分配
controller:
replicaCount: 2
resources:
requests:
cpu: 4
memory: 4Gi
limits:
cpu: 4
memory: 4Gi
部署 Chart
创建名称空间:
kubectl create ns ingress-nginx
部署或更新 Chart
helm -n ingress-nginx upgrade --install ingress-nginx . -f values.yaml
常见问题
GitHub 连接超时
下载 chart 包:
$ helm pull ingress-nginx/ingress-nginx
Error: Get "https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.11.2/ingress-nginx-4.11.2.tgz": unexpected EOF
由于境外网络的原因,可以到 Releases 获取 Chart
更多自定义
接下来的几篇文档指南对生产环境 ingress-nginx
组件的调优至关重要,请继续阅读。