Skip to main content

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 包?
  1. 远程 Repo 位于境外 GitHub ,从境内访问容易超时。
  2. 生产环境需要严格固定开源组件版本号

添加 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 仓库进行保存,好处:

  1. 利用 Git 的版本控制,记录每一次配置变更过程。
  2. 与他人的协作上,能够快速熟悉掌握一个开源组件的完整生命周期。

配置 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 组件的调优至关重要,请继续阅读。

参考文档