k8s 对外服务之 Ingress
本帖最后由 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 配置示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
在上述配置中,所有对 `example.com` 的请求都会被转发到 `example-service` 服务的 80 端口。
4. 配置 Ingress
4.1 安装 Ingress 控制器
首先需要在集群中安装一个 Ingress 控制器。以 NGINX Ingress 控制器为例,可以使用以下命令进行安装:
kubectl apply -f https://raw.githubusercontent.co ... r/cloud/deploy.yaml
4.2 创建 Ingress 资源
创建一个 Ingress 资源以定义路由规则。以下是一个示例配置文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
该配置将 `myapp.example.com/app1` 的请求路由到 `app1-service`,将 `myapp.example.com/app2` 的请求路由到 `app2-service`。
4.3 配置 TLS
为 Ingress 配置 TLS 可以确保传输安全性。首先需要创建一个包含证书和密钥的 Secret:
kubectl create secret tls my-tls-secret --key tls.key --cert tls.crt
然后在 Ingress 配置中引用该 Secret:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: secure-ingress
spec:
tls:
- hosts:
- secure.example.com
secretName: my-tls-secret
rules:
- host: secure.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: secure-service
port:
number: 443
5. 常见问题解答
5.1 为什么我的 Ingress 配置没有生效?
确保 Ingress 控制器已经正确安装并运行,同时检查 Ingress 资源的配置是否正确,特别是主机名和路径。
5.2 如何调试 Ingress 配置?
可以通过查看 Ingress 控制器的日志来调试问题。例如,对于 NGINX Ingress 控制器,可以使用以下命令查看日志:
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
页:
[1]