news 2026/5/1 15:25:24

从Service到Ingress:手把手教你为K8s里的Web服务配置域名和HTTPS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Service到Ingress:手把手教你为K8s里的Web服务配置域名和HTTPS

从Service到Ingress:Kubernetes Web服务公网暴露实战指南

当你成功在Kubernetes集群内部署了Web应用后,如何安全、高效地将其暴露给公网用户访问?这不仅是技术实现的挑战,更是生产环境部署的关键环节。本文将带你从ClusterIP Service出发,逐步打通NodePort、Ingress Controller直至HTTPS证书配置的完整链路,解决"服务跑起来了,但外部无法访问"这一典型痛点。

1. 理解Kubernetes网络暴露层级

在Kubernetes中,服务暴露存在明确的层级递进关系:

  • ClusterIP Service:默认服务类型,提供集群内部通信
  • NodePort Service:通过节点端口暴露服务到集群外部
  • LoadBalancer Service:云厂商提供的负载均衡器集成
  • Ingress:七层流量管理,支持基于域名的路由

关键区别:前三种属于四层(TCP/UDP)负载均衡,而Ingress实现了七层(HTTP/HTTPS)应用层路由。

典型场景选择矩阵

暴露方式适用场景限制条件
ClusterIP集群内部服务调用仅限集群内访问
NodePort开发测试环境快速暴露端口范围受限(30000-32767)
LoadBalancer云环境生产部署依赖云厂商实现
Ingress生产环境多服务域名管理需要额外部署Controller

2. 基础服务暴露:从ClusterIP到NodePort

2.1 创建ClusterIP Service

首先为Deployment创建基本的ClusterIP服务:

apiVersion: v1 kind: Service metadata: name: web-service spec: selector: app: web-app ports: - protocol: TCP port: 80 targetPort: 8080

注意:确保selector与Deployment中定义的标签匹配

2.2 升级为NodePort Service

修改Service类型实现节点端口映射:

apiVersion: v1 kind: Service metadata: name: web-nodeport spec: type: NodePort selector: app: web-app ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 31000

验证节点端口可访问性:

curl http://<任一节点IP>:31000

NodePort的局限性

  • 端口冲突风险(30000-32767范围)
  • 缺乏七层路由能力
  • 直接暴露节点存在安全隐患

3. 进阶方案:Ingress Controller部署

3.1 安装Nginx Ingress Controller

使用Helm快速部署:

helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx --create-namespace

验证控制器状态:

kubectl get pods -n ingress-nginx

3.2 配置基础Ingress规则

创建域名路由规则:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress spec: ingressClassName: nginx rules: - host: "app.example.com" http: paths: - pathType: Prefix path: "/" backend: service: name: web-service port: number: 80

关键字段说明:

  • ingressClassName:指定使用的Ingress控制器
  • host:配置的访问域名
  • path:URL路径匹配规则

4. 安全加固:HTTPS证书自动化

4.1 安装cert-manager

证书管理工具部署:

helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.8.0 \ --set installCRDs=true

4.2 配置Let's Encrypt签发

创建ClusterIssuer资源:

apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: admin@example.com privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx

4.3 启用Ingress HTTPS

更新Ingress配置自动获取证书:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" spec: ingressClassName: nginx tls: - hosts: - app.example.com secretName: web-tls rules: - host: "app.example.com" http: paths: - pathType: Prefix path: "/" backend: service: name: web-service port: number: 80

验证证书状态:

kubectl get certificate

5. 生产环境优化实践

5.1 性能调优参数

Nginx Ingress关键配置示例:

controller: config: keep-alive: "75" keep-alive-requests: "100" upstream-keepalive-connections: "1000" worker-processes: "4"

5.2 监控与告警

Prometheus监控指标示例:

apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: nginx-ingress-monitor labels: release: prometheus spec: selector: matchLabels: app.kubernetes.io/name: ingress-nginx endpoints: - port: metrics interval: 15s

5.3 多租户隔离方案

通过Annotations实现路径隔离:

metadata: annotations: nginx.ingress.kubernetes.io/configuration-snippet: | if ($request_uri ~* "/admin/") { set $namespace "restricted"; } nginx.ingress.kubernetes.io/server-snippet: | location ~* "^/admin/" { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/auth/.htpasswd; }

6. 常见问题排查指南

证书签发失败

  1. 检查ACME挑战记录
    kubectl describe challenge <challenge-name>
  2. 验证DNS解析是否正确
  3. 确认防火墙未拦截HTTP-01验证请求

Ingress路由不生效

  1. 检查Ingress控制器日志
    kubectl logs -n ingress-nginx <controller-pod>
  2. 验证后端服务健康状态
    kubectl get endpoints <service-name>

HTTPS重定向循环: 在Ingress中添加修正配置:

annotations: nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/ssl-redirect: "true"

经过多个生产环境实践验证,这套方案在保持安全性的同时提供了良好的扩展性。特别是在证书自动续期方面,cert-manager的引入让HTTPS维护成本大幅降低。对于需要灰度发布的场景,可以通过Ingress的Canary注解实现流量切分,这在实际业务迭代中表现出色。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 15:20:28

408复试面试官最爱问的计算机网络知识点,我帮你整理好了(附速查清单)

408复试面试官最爱问的计算机网络高频考点深度解析 面对计算机专业考研复试&#xff0c;网络知识往往是面试官考察的重点领域。不同于笔试的标准化答题&#xff0c;面试更注重对核心概念的理解深度和表达逻辑。本文将围绕TCP/IP协议栈、典型网络模型对比、关键算法原理三大维度…

作者头像 李华
网站建设 2026/5/1 15:20:25

geojson.io 高级技巧:如何利用Mapbox GL Draw实现复杂地图交互

geojson.io 高级技巧&#xff1a;如何利用Mapbox GL Draw实现复杂地图交互 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io geojson.io 是一款快速、简单的…

作者头像 李华
网站建设 2026/5/1 15:14:23

PKHeX自动合法性插件:如何快速实现宝可梦数据合规检查

PKHeX自动合法性插件&#xff1a;如何快速实现宝可梦数据合规检查 【免费下载链接】PKHeX-Plugins Plugins for PKHeX 项目地址: https://gitcode.com/gh_mirrors/pk/PKHeX-Plugins 还在为宝可梦数据合法性验证而烦恼吗&#xff1f;PKHeX-Plugins项目中的AutoLegalityMo…

作者头像 李华
网站建设 2026/5/1 15:08:12

胡桃工具箱真的能让你的原神游戏效率提升300%吗

胡桃工具箱真的能让你的原神游戏效率提升300%吗 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao Snap Huta…

作者头像 李华