0Pricing
DevOps Bootcamp · 课时

用于外部访问的 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: 80

Ingress 用途检查

以下哪些选项是使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Service 暴露应用
  2. Service 类型:ClusterIP、NodePort、LoadBalancer
  3. 用于外部访问的 Ingress
  4. DNS 与服务发现
← 返回 DevOps Bootcamp