Ingress:HTTP(S)负载均衡与TLS安全连接配置
立即解锁
发布时间: 2025-08-25 02:04:16 阅读量: 2 订阅数: 6 

# Ingress: HTTP(S) 负载均衡与 TLS 安全连接配置
## 1. 引言
在现代应用开发中,微服务架构正变得越来越流行。它允许将多个内部服务分开部署和管理,这些服务可以用不同的语言编写,由不同的团队维护。而 Kubernetes 提供了多种工具来创建、发现、连接和暴露这些服务,其中 Ingress 在 HTTP(S) 负载均衡和服务暴露方面发挥着重要作用。
## 2. Ingress 基础
### 2.1 与 LoadBalancer 类型服务的对比
之前我们常使用 LoadBalancer 类型的服务来创建外部 IP,它提供的是第 4 层(L4)负载均衡,在网络层平衡请求,可支持多种协议(如 TCP、UDP、SCTP)。但如果要暴露 HTTP 服务,需要自己实现 TLS 终止处理,且所有流量会根据规则路由到一组 Pods,无法直接在同一个负载均衡器上暴露多个独立服务。
而第 7 层(L7)负载均衡器,也就是 Ingress,在 HTTP 请求层进行负载均衡,能做更多高级操作,如终止 HTTPS 连接、基于路径路由等。在 Kubernetes 中,通过 Ingress 对象来创建 HTTP 负载均衡器。
### 2.2 Ingress 的优势
Ingress 可以将多个内部服务置于单个外部 IP 之后进行负载均衡,能根据 URI 路径(如 /foo, /bar)、主机名(如 foo.example.com, bar.example.com)或两者来将 HTTP 请求定向到不同的后端服务。这种将多个服务运行在单个 IP 上,并在单个域名下提供不同路径服务的能力是 Ingress 独有的。
在应用扩展时,Ingress 也非常有用。当需要将服务拆分为多个服务以提高开发效率或实现独立扩展时,可以使用 Ingress 路由请求,而不改变任何面向公众的 URL。
### 2.3 Ingress 配置示例
以下是一个 Ingress 示例,不同的路由由不同的后端服务提供:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: timeserver-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: timeserver-internal
port:
number: 80
- path: /robohash
pathType: Prefix
backend:
service:
name: robohash-internal
port:
number: 80
```
还有一个使用不同主机的示例:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: timeserver-ingress
spec:
rules:
- host: timeserver.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: timeserver-internal
port:
number: 80
- host: robohash.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: robohash-internal
port:
number: 80
```
Ingress 引用的内部服务需要是 NodePort 类型,示例如下:
```yaml
apiVersion: v1
kind: Service
metadata:
name: timeserver-internal
spec:
selector:
pod: timeserver-pod
ports:
- port: 80
targetPort: 80
protocol: TCP
type: NodePort
```
### 2.4 路径匹配规则
Ingress 对象可以通过 pathType 属性配置为精确匹配(只有与给定路径完全匹配的请求才会路由到服务)或前缀匹配(所有匹配路径前缀的请求都会路由)。在多个路径匹配请求的情况下,优先选择最长匹配路径;如果两条路径匹配程度相同,精确路径类型的优先级高于前缀路径类型。
### 2.5 部署示例
部署上述示例的步骤如下:
1. 如果之前的示例正在运行,先删除:
```bash
kubectl delete -f Chapter07/7.1_InternalServices
```
2. 进入相应目录并创建资源:
```bash
cd Chapter07/7.2_Ingress
kubectl create -f robohash-deploy.yaml
kubectl create -f robohash-service.yaml
kubectl create -f timeserver-deploy-dns.yaml
kubectl create -f timeserver-service-internal.yaml
kubectl create -f ingress_path.yaml
```
3. 查看 Ingress 状态:
```bash
kubectl get ing -w
```
当 Ingress 获得 IP 后,就可以通过浏览器访问。注意,Ingress 背后的资源可能需要一些时间来配置,即使有了 IP 地址并访问,可能会暂时看到 404 错误,建议 5 分钟后再试。
### 2.6 调试 Ingress 问题
可以使用 `kubectl describe ingress` 来调试 Ingress 问题。以下是分
0
0
复制全文
相关推荐









