Ubuntu系统环境准备与依赖安装
在开始配置Kubernetes Ingress Nginx之前,需要确保Ubuntu系统满足基本运行要求。推荐使用Ubuntu 20.04 LTS或更高版本,内核版本需不低于5.4以支持完整的容器网络功能。通过sudo apt update && sudo apt upgrade -y
命令更新系统后,必须安装Docker CE容器运行时和kubeadm工具链。值得注意的是,在Ubuntu上部署Kubernetes集群时,需要特别关闭swap分区以避免kubelet运行异常,这可以通过sudo swapoff -a
命令临时禁用,并在/etc/fstab中永久注释相关条目。
使用Helm部署Ingress Nginx控制器
Helm作为Kubernetes的包管理工具,能极大简化Ingress Nginx控制器的部署流程。需要添加官方仓库helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
,通过helm install
命令定制化安装。在Ubuntu环境下,建议选择NodePort或LoadBalancer类型的Service,特别是当使用云厂商托管Kubernetes服务时。配置文件中需要重点调整controller.replicaCount
参数以匹配集群规模,同时设置controller.hostNetwork=true
可优化网络性能。部署完成后,通过kubectl get pods -n ingress-nginx
验证控制器状态是否正常。
Ingress路由规则配置详解
创建有效的Ingress资源是暴露服务的关键步骤。在YAML定义中,spec.rules.host
字段需对应实际域名,paths
数组则定义URL路径到后端Service的映射关系。Ubuntu环境下测试时,可先在/etc/hosts文件中添加本地域名解析记录。典型的配置示例包括:路径精确匹配(pathType: Exact
)、前缀匹配(pathType: Prefix
)以及默认后端设置。建议为每个微服务创建独立的Ingress资源,并通过kubernetes.io/ingress.class: nginx
注解明确指定Ingress控制器。
Let's Encrypt实现自动化SSL证书
通过Cert-Manager与Let's Encrypt的集成,可以为Ingress Nginx自动签发和续期SSL证书。在Ubuntu上需要先安装Cert-Manager的CRD(Custom Resource Definitions),配置ClusterIssuer资源。生产环境推荐使用ACMEv2协议的DNS-01验证方式,这需要在Secret中存储云服务商的API密钥。成功配置后,只需在Ingress资源中添加cert-manager.io/cluster-issuer
注解并定义tls
字段,系统就会自动创建Certificate资源。90天证书到期前,Cert-Manager会自动完成续期操作,确保服务不间断。
HTTPS重定向与安全加固配置
强制HTTPS访问是安全最佳实践,可通过Ingress Nginx的注解nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
实现。在Ubuntu部署场景中,还需要调整SSL协议配置禁用不安全的TLS 1.0/1.1版本,这需要修改ConfigMap中的ssl-protocols
参数。HSTS(HTTP Strict Transport Security)头部的添加能有效防止SSL剥离攻击,建议设置max-age
至少为31536000秒(1年)。对于高安全要求场景,可启用OCSP Stapling和自定义DH参数来增强密钥交换安全性。
性能监控与故障排查技巧
稳定的Ingress Nginx服务需要建立完善的监控体系。Prometheus Operator可以自动发现并采集控制器的性能指标,在Ubuntu上需额外部署对应的ServiceMonitor资源。关键监控指标包括:每秒请求数(RPS
)、5xx错误率、SSL握手耗时等。当日志出现upstream timed out
错误时,可能需要调整proxy-read-timeout
注解值;若发现certificate has expired
告警,则应检查Cert-Manager的证书续期流程。使用kubectl describe ingress
命令能快速获取资源状态详情,而nginx-ingress-controller --v=5
参数可开启调试日志。