找回密码
 立即注册
查看: 403|回复: 0

[linux] k8s 对外服务之 Ingress

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-7-6 15:45:40 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-7-6 16:12 编辑

1. 引言

在 Kubernetes (k8s) 集群中,如何将内部服务暴露给外部用户是一个重要的问题。Ingress 是 k8s 提供的一种资源,用于管理外部访问集群内部服务的方式。本文将详细介绍 Ingress 的概念、工作原理、配置方法以及常见的使用场景。

2. Ingress 概述

Ingress 是 k8s 中的一种 API 对象,用于管理外部 HTTP 和 HTTPS 访问集群内部服务的路由规则。与 NodePort 和 LoadBalancer 不同,Ingress 提供了更为灵活和丰富的功能,如基于域名的虚拟主机、多路径路由和 TLS 支持。

3. Ingress 的工作原理

3.1 Ingress 控制器

Ingress 资源本身并不实际处理流量,需要一个 Ingress 控制器来执行路由规则。Ingress 控制器是一个运行在 k8s 集群中的应用程序,它监控 Ingress 资源的变化,并相应地配置底层的负载均衡器或代理服务器(如 NGINX、Traefik 等)。

3.2 路由规则

Ingress 资源定义了流量路由的规则,包括主机名、路径和目标服务。一个简单的 Ingress 配置示例如下:

  1.     apiVersion: networking.k8s.io/v1
  2.     kind: Ingress
  3.     metadata:
  4.       name: example-ingress
  5.     spec:
  6.       rules:
  7.       - host: example.com
  8.         http:
  9.           paths:
  10.           - path: /
  11.             pathType: Prefix
  12.             backend:
  13.               service:
  14.                 name: example-service
  15.                 port:
  16.                   number: 80
复制代码


在上述配置中,所有对 `example.com` 的请求都会被转发到 `example-service` 服务的 80 端口。

4. 配置 Ingress

4.1 安装 Ingress 控制器

首先需要在集群中安装一个 Ingress 控制器。以 NGINX Ingress 控制器为例,可以使用以下命令进行安装:

  1.     kubectl apply -f https://raw.githubusercontent.co ... r/cloud/deploy.yaml
复制代码


4.2 创建 Ingress 资源

创建一个 Ingress 资源以定义路由规则。以下是一个示例配置文件:

  1.     apiVersion: networking.k8s.io/v1
  2.     kind: Ingress
  3.     metadata:
  4.       name: my-ingress
  5.       annotations:
  6.         nginx.ingress.kubernetes.io/rewrite-target: /
  7.     spec:
  8.       rules:
  9.       - host: myapp.example.com
  10.         http:
  11.           paths:
  12.           - path: /app1
  13.             pathType: Prefix
  14.             backend:
  15.               service:
  16.                 name: app1-service
  17.                 port:
  18.                   number: 80
  19.           - path: /app2
  20.             pathType: Prefix
  21.             backend:
  22.               service:
  23.                 name: app2-service
  24.                 port:
  25.                   number: 80
复制代码

该配置将 `myapp.example.com/app1` 的请求路由到 `app1-service`,将 `myapp.example.com/app2` 的请求路由到 `app2-service`。

4.3 配置 TLS

为 Ingress 配置 TLS 可以确保传输安全性。首先需要创建一个包含证书和密钥的 Secret:

  1.     kubectl create secret tls my-tls-secret --key tls.key --cert tls.crt
复制代码


然后在 Ingress 配置中引用该 Secret:

  1.     apiVersion: networking.k8s.io/v1
  2.     kind: Ingress
  3.     metadata:
  4.       name: secure-ingress
  5.     spec:
  6.       tls:
  7.       - hosts:
  8.         - secure.example.com
  9.         secretName: my-tls-secret
  10.       rules:
  11.       - host: secure.example.com
  12.         http:
  13.           paths:
  14.           - path: /
  15.             pathType: Prefix
  16.             backend:
  17.               service:
  18.                 name: secure-service
  19.                 port:
  20.                   number: 443
复制代码


5. 常见问题解答

5.1 为什么我的 Ingress 配置没有生效?

确保 Ingress 控制器已经正确安装并运行,同时检查 Ingress 资源的配置是否正确,特别是主机名和路径。

5.2 如何调试 Ingress 配置?

可以通过查看 Ingress 控制器的日志来调试问题。例如,对于 NGINX Ingress 控制器,可以使用以下命令查看日志:

  1.     kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
复制代码


5.3 可以使用 Ingress 管理非 HTTP/HTTPS 流量吗?

Ingress 主要用于管理 HTTP 和 HTTPS 流量。如果需要管理其他类型的流量,可以使用 Service 类型的 LoadBalancer 或 NodePort。

6. 结论

Ingress 是 Kubernetes 提供的一种强大且灵活的外部流量管理工具。通过理解 Ingress 的工作原理和配置方法,用户可以更高效地管理集群中的外部访问请求,并为微服务架构提供可靠的流量路由解决方案。

希望本文对你在实际使用 Ingress 时有所帮助,如有其他问题,欢迎讨论交流。






/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 08:35 , Processed in 0.062327 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表