15 Kubernetes中的Ingress控制器

在上一篇文章中,我们讨论了Kubernetes中的负载均衡及其如何通过服务将流量分发到多个后端Pod。在本篇中,我们将深入探讨Ingress控制器,它是Kubernetes中实现HTTP(S)路由和负载均衡的重要组件。Ingress允许你将外部的HTTP(S)请求路由到Kubernetes内部的服务上,并提供了一些额外的功能,比如基于路径或主机名的路由、TLS终止等。

Ingress是什么?

Ingress是Kubernetes中的一个API对象,它管理外部用户对于服务的访问。通过Ingress,你可以定义如何将HTTP(S)请求路由到不同的服务,而不需要为每个服务单独暴露一个负载均衡器或NodePort服务。Ingress会被具体的Ingress控制器实现,例如NGINX Ingress ControllerTraefik等。

Ingress的基本结构

Ingress资源的基本示例结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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端口。

安装Ingress控制器

在Kubernetes集群中使用Ingress,首先需要安装一个Ingress控制器。以下是安装NGINX Ingress Controller的步骤:

  1. 应用控制器的YAML文件
    你可以使用kubectl来应用NGINX Ingress Controller的官方安装文件:

    1
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
  2. 验证控制器是否安装成功

    1
    kubectl get pods -n ingress-nginx

    确保ingress-nginx-controller的Pod状态为Running

配置Ingress资源

创建Ingress资源可以通过编写YAML文件并应用到集群中。以下是一个完整的Ingress示例,它展示了多个路径的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-path-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /static
pathType: Prefix
backend:
service:
name: static-service
port:
number: 80

在这个例子中,/api路径的请求将被路由到api-service,而/static路径的请求则会路由到static-service

TLS 加密

Ingress还支持HTTPS,使用TLS来加密流量。首先,你需要有一个TLS证书和密钥,可以通过Secret对象来存储。

1
kubectl create secret tls my-tls-secret --cert=path/to/tls.crt --key=path/to/tls.key

然后,将Secret与Ingress关联:

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

这样,当用户访问myapp.example.com时,流量将通过HTTPS进行加密。

复杂路由和重定向

案例展示了Ingress的灵活性。例如,可以使用重定向来强制使用HTTPS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80

在这里,通过ssl-redirect注解,HTTP请求会被重定向到HTTPS。

小结

在本篇文章中,我们讨论了Kubernetes中的Ingress控制器,包括其定义、安装及如何配置Ingress资源以实现流量路由和TLS加密。Ingress控制器提供了一种灵活的方式来管理服务暴露策略,减少了对外部负载均衡器的需求。

接下来的文章中,我们将关注ConfigMapSecret的使用,进一步探讨Kubernetes中的配置和密钥管理。

15 Kubernetes中的Ingress控制器

https://zglg.work/kubernetes-zero/15/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论