k8s集群ingress碎碎念
2026/5/21 20:31:13 网站建设 项目流程

比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。

目录

前言

一、Ingress 是什么?

二、Controller 是什么?

三、Ingress 的作用

四、如何实现

1. 安装 Ingress Controller

2. 创建 Ingress 对象

3. 高可用建议

4. 外部访问

总结


前言

ingress单独理解是好理解的,k8s的service、hostnameNetwork单独理解也是好理解的,排列组合用起来确实容易眼花缭乱。万变不离其宗,那就以不变应万变叭~


一、Ingress 是什么?

Ingress是 Kubernetes 的HTTP/HTTPS 层流量入口(入口控制器),它负责根据域名和路径将外部请求路由到集群内部的 Service。

  • Service(ClusterIP / NodePort)→ 解决了“找 Pod”的问题
  • Ingress→ 解决了“找 Service 里的哪一个路径 / 域名”的问题

Ingress 本身是一个K8s 对象 + Controller的组合,没 Controller 其实不能工作。

二、Controller 是什么?

Ingress Controller = 负责实现 Ingress 对象规则的实际服务

1)Ingress就是一个“路由清单”或者“路由计划表”,告诉 Kubernetes:“域名 myapp.example.com 的流量要送到哪个 Service”。

2)但是这个清单本身不会自动搬运流量。它只是一个对象,存储在 Kubernetes 里。

3)Ingress Controller才是真正做路由的程序,它会监听这个清单,把流量送到对应的 Service。

最常见的实现是nginx,所以很多人说 Ingress Controller = nginx

三、Ingress 的作用

Ingress 的主要作用有:

1.基于域名路由:不同域名指向不同 Service

eg: app1.example.com → Service app1

app2.example.com → Service app2

2.基于路径路由:同一个域名下,不同路径指向不同 Service

eg: /api → Service api

/web → Service frontend

3.TLS/HTTPS 终端:Ingress 可以绑定证书,为多个域名提供 HTTPS

4.负载均衡(应用层):在 Service 之前,Ingress Controller 可以做 Layer7 负载均衡

5.跨集群/跨服务访问控制(结合注解或中间件):比如限流、白名单、重定向等

四、如何实现

1. 安装 Ingress Controller

Ingress 本身只是对象,需要 Controller 来真正路由流量。常见有:

  • NGINX Ingress Controller
  • Traefik
  • HAProxy Ingress

安装 NGINX Ingress Controller(简化示例):

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.14.0/deploy/static/provider/cloud/deploy.yaml

2. 创建 Ingress 对象

注意:Ingress YAML里的端口 = Service端口

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: kubernetes.io/ingress.class: nginx spec: tls: - hosts: - myapp.example.com secretName: myapp-tls rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80
  • host→ 域名路由
  • paths→ 路径路由
  • backend.service.name/port→ 指向内部 Service

3. 高可用建议

  • Ingress Controller 使用 Deployment/DaemonSet
    • DaemonSet → 每个节点一个 Pod,保证节点级别高可用
    • Deployment → 多副本 Pod,保证 Pod 高可用
  • hostNetwork: true→ 如果要直接占用节点 80/443 端口

4. 外部访问

如果使用 NodePort 类型 Service + Ingress Controller → 外部访问端口在 30000-32767。(可以配置hostNetwork: true占用节点的80/443端口)

如果使用 hostNetwork + DaemonSet → 外部可以直接访问节点的 80/443(这种方式可以访问每个节点的ip:80/443。但是有url的话,还是得前面再做一层nginx,或者直接用ingress)


总结

这里其实最让人乱七八糟的是端口,ingress的yaml里面写的是service服务的端口。service的yaml里面写的是三个端口。

port: 443 # Service 内部端口,集群内部访问这个 Service 用 443
targetPort: 443 # Pod 的端口,Service 转发到 Pod 444
nodePort: 32443 # 节点上暴露的端口,外部访问节点IP:32443也能访问 Pod

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询