如何让Ingress-Nginx使用Cert-Manager生成的Let's Encrypt证书(K3S集群+Ansible部署Home Assistant场景)
如何让Ingress-Nginx使用Cert-Manager生成的Let's Encrypt证书(K3S集群+Ansible部署Home Assistant场景)
看起来你已经走完大半部署流程啦——用Ansible创建了Home Assistant的专属命名空间,也通过Cert-Manager发起了Let's Encrypt证书申请,现在就差最后一步:把Ingress配置和生成的证书关联起来,让Ingress-Nginx自动启用HTTPS。我来帮你补全这个环节:
一、先确认证书申请状态(必做检查!)
在配置Ingress之前,先确保Cert-Manager已经成功生成了证书。可以在集群节点上执行这条命令,或者在Ansible里新增一个检查任务:
kubectl get certificates -n home-system
如果输出里homeassistant-tls的状态显示为Ready,说明证书已经顺利拿到手了,接下来可以放心配置Ingress。
二、添加Ingress配置的Ansible任务
你需要在现有playbook里新增一个任务,创建Ingress资源并关联你的Let's Encrypt证书。直接把下面这段代码加到你的playbook里就行:
- name: Create Home Assistant Ingress with TLS kubernetes.core.k8s: state: present definition: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: homeassistant-ingress namespace: home-system annotations: # 指定Ingress控制器为K3S自带的Ingress-Nginx kubernetes.io/ingress.class: "nginx" # 强制HTTP请求跳转到HTTPS nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: tls: - hosts: - "homeassistant.example.com" # 这里要和你Certificate资源里指定的secretName完全一致 secretName: homeassistant-tls-secret rules: - host: "homeassistant.example.com" http: paths: - path: / pathType: Prefix backend: service: # 替换成你实际部署的Home Assistant服务名称,默认通常是homeassistant name: homeassistant port: # Home Assistant默认端口是8123,根据你的部署情况调整 number: 8123
三、几个关键注意点
- 服务名称与端口:确保
spec.rules[0].http.paths[0].backend.service.name是你实际部署的Home Assistant服务名称,端口号也要对应正确。如果是用官方Helm Chart部署的Home Assistant,服务名默认就是homeassistant,端口8123。 - 测试/生产环境切换:你之前的Certificate用了
letsencrypt-staging(Let's Encrypt测试环境),生成的证书不会被浏览器信任。如果是生产环境使用,记得把它换成你的生产环境ClusterIssuer(比如letsencrypt-prod),同时更新Certificate里的issuerRef字段。 - Ingress Class匹配:K3S默认的Ingress控制器是Ingress-Nginx,所以注解里的
kubernetes.io/ingress.class: "nginx"必须保留,确保Ingress被正确识别和处理。
四、验证配置是否生效
执行完playbook后,用这条命令检查Ingress状态:
kubectl get ingress -n home-system
然后访问https://homeassistant.example.com,如果能正常打开Home Assistant,且浏览器显示安全的HTTPS连接,说明整个配置就成功啦!
备注:内容来源于stack exchange,提问作者Lasse Michael Mølgaard
相关产品推荐
相关产品推荐

