K8S Ingress

Ingress是什么

Service是基于四层TCP和UDP协议转发的,而Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分
要想使用Ingress功能,必须在Kubernetes集群上安装Ingress Controller。Ingress Controller有很多种实现,最常见的就是Kubernetes官方维护的NGINX Ingress Controller

Ingress

外部请求首先到达Ingress Controller,Ingress Controller根据Ingress的路由规则,查找到对应的Service,进而通过Endpoint查询到Pod的IP地址,然后将请求转发给Pod。

创建Ingress

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- host: www.example.com # 域名
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80

Ingress中还可以设置外部域名,这样您就可以通过域名来访问到ELB,进而访问到后端服务。

域名访问依赖于域名解析,需要您将域名解析指向ELB实例的IP地址,例如您可以使用云解析服务 DNS来实现域名解析。

路由到多个服务

Ingress可以同时路由到多个服务,配置如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
spec:
rules:
- host: foo.bar.com # host地址
http:
paths:
- path: "/foo"
backend:
serviceName: s1
servicePort: 80
- path: "/bar"
backend:
serviceName: s2
servicePort: 80