用于外部访问的 Ingress
配置 Ingress 管理对 Service 的外部访问,提供 HTTP/S 路由和负载均衡。
用于外部访问的 Ingress 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
超越 NodePort 和 LoadBalancer
我们已经了解了 NodePort 和 LoadBalancer 等 Kubernetes 服务类型,它们可用于将应用对外暴露。
虽然这些类型很有用,但在管理复杂的外部访问需求时可能会变得烦琐,尤其是当您需要在一个 IP 地址上托管多个应用或 API,并为其设置特定的路由规则时。
这正是 Ingress 的用武之地,它提供了更强大、更灵活的解决方案。
Kubernetes Ingress 简介
Ingress 是 Kubernetes 的一种 API 对象,用于管理对集群中服务的外部访问,主要处理 HTTP 和 HTTPS 流量。
- 它充当外部请求的单一入口。
- 它支持根据主机名或 URL 路径进行 HTTP/S 路由。
- 它还可以提供 SSL/TLS 终止和负载均衡等功能。
您可以把 Ingress 理解为智能流量控制器,将 Web 流量导向正确的内部服务。
Ingress 控制器
Ingress 资源本身只是一组规则,不会直接处理流量。要让 Ingress 正常工作,您需要在集群中运行一个 Ingress 控制器。
Ingress 控制器会监视 Ingress 资源,并根据定义的规则配置外部负载均衡器(或反向代理)。
常见的 Ingress 控制器包括 Nginx、Traefik,以及针对特定云平台的控制器,例如 Google Cloud 的 GCE Ingress 或 AWS Load Balancer Controller。
Ingress 规则的工作方式
Ingress 定义了将传入的外部请求映射到集群中特定后端服务的规则。这些规则通常会指定:
- 主机:域名(例如
www.my-app.com)。 - 路径:URL 路径(例如
/api、/blog)。 - 后端服务:应将流量转发到的 Kubernetes 服务及端口。
Ingress 控制器会针对每个传入请求评估这些规则,以确定正确的目标。
编写 Ingress YAML
与其他 Kubernetes 资源一样,Ingress 使用 YAML 清单定义。下面是一个展示关键字段的基本结构:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80简单的基于路径的 Ingress
让我们创建一个 Ingress 资源,将 myapp.example.com 根路径(/)的所有流量路由到名为 my-web-service、端口为 80 的服务。
在应用此 Ingress 之前,请确保集群中已经运行名为 my-web-service 的部署和服务。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: basic-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80部署您的 Ingress
要部署 Ingress 资源,请将 YAML 保存到文件中(例如 basic-ingress.yaml),然后使用 kubectl apply:
kubectl apply -f basic-ingress.yaml
您可以使用 kubectl get ingress 查看 Ingress 的状态。随后,Ingress 控制器会根据这些规则配置外部负载均衡器。
要进行测试,通常需要更新本地的 /etc/hosts 文件(或 DNS),将 myapp.example.com 指向 Ingress 控制器的外部 IP 地址。
基于主机的路由示例
通过使用不同的主机名,Ingress 非常适合在一个外部 IP 地址上托管多个应用。在此示例中,app1.example.com 路由到 service-app1,而 app2.example.com 路由到 service-app2。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: host-routing-ingress
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app1
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app2
port:
number: 80多个路径,共用一个主机
您还可以将同一主机名下的不同 URL 路径路由到不同的后端服务。这非常适合微服务架构或单个应用的不同部分。
例如,发送到 api.example.com/users 的请求会转到 users-service,而发送到 api.example.com/products 的请求会转到 products-service。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-routing-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: users-service
port:
number: 80
- path: /products
pathType: Prefix
backend:
service:
name: products-service
port:
number: 80Ingress 用途检查
以下哪些选项是使用 Kubernetes Ingress 的主要优势?
回顾:使用 Ingress 实现智能路由
做得很好!您已经了解了 Kubernetes Ingress,这是管理外部用户如何与应用交互的重要组件。
- Ingress 支持根据主机名和 URL 路径进行灵活的 HTTP/S 路由。
- 它需要一个 Ingress 控制器(例如 Nginx)来监视 Ingress 规则并配置路由。
- 它可以通过单个外部 IP 地址简化多个服务的暴露,使集群更高效、更易于管理。
掌握 Ingress 是构建稳健且易于访问的云原生应用的关键!
常见问题解答
「用于外部访问的 Ingress」课时是免费的吗?
是的 — 「用于外部访问的 Ingress」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「用于外部访问的 Ingress」这节课中我会学到什么?
配置 Ingress 管理对 Service 的外部访问,提供 HTTP/S 路由和负载均衡。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「用于外部访问的 Ingress」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。