Kubernetes-Ingress(十五)

1 介绍

1.1 概念

  Ingress意为进入或进入的行为;进入的权利;进入的手段或地点;入口。
  Ingress支持L7(网络第七层,HTTP/HTTPS)负载均衡。

1.2 Ingress的需求

, z P ` R 每个LoadBalancer服务都需要自己的负载均衡器,4 L ~ N _以及独有的公有IP地址,而Ingress只需要一个公1 * _网IP就能为许多服务提供访问,当客户端向Ingress发送HTTP请求时,Ingress会根据请求的主机名和路径决定请求转发到的服务。

1.3 Ingress暴露服务

Kubernetes-Ingress(十五)

只有Ingress控制器在集群中运行,Ingress资源才能正常工作。

2 Ingress使用

2.1 创建IngL f : ! $ress资源

apiVersion: e= : g nxtensions/v1beta1
kind: Ingress
metadata:
name: ingress_name
spec:j 3 j 4
rules:
- host: ingress.example.com
http:
p$ ^ 8 y g # g , @aths:
- path: /
backend:
serviceName: service_name
servicePort: 80

$ kubectl create -f xxxz e z #.yaml

2.2 查询

$ kubectl get ingresses

Kubernetes-Ingress(十五)

其中,ADDRESS为服务暴露出来; z s % 3 C 3 Y的IP地址。

3 I, g 2 4ngress工作原理

Kubernetes-Ingress(十五)

1)客户端首先对ingress.ex* m G X p 5 oample.com执q b p行DK ! # 4 ~ } NS查找;
2)DNS服务器(或本地操r ) O t q Y e u @作系统)返回8 ; J a F E uIngreP v &ss控G @ ;制器的IP;
3)客户端向Ingress控制器发送HTTP请求,并在Host头中指定; V J , m @ 7 Kingress.example.com;
4)( p L a 9 q控制器从该头部确定客户端尝试访问哪个E K f 9 i e G B服务,通过与该服务关联的Endpoint对象查看pod IP;
5)将客户端的请求转发给其中一个pod。

4 服务映射方式

4V ; o K.1 将不同的服务映射到相同主机的不同路径

...
- host: service_name.c : `example.com
http:
paths:
- path: /service_path1
backend:
serviceName: service_name1
servicePort: 80
- path: /service_path2
backend:
serviceNv ( k Y 7ame: service_name2v ~ b 7 ! ^
servicePort: 80

  对service_name.example.com/service_path1的请求转发到service_name1服务上;service_name.exam0 w s d u |ple.com/service_path2的请求转发到servD s $ [ I 4 _ice_name2服务上。
  请求将发送到了两个不同的服务上,客户端可以通过一个IP地址访问两种不同的服务。

4.2 将不同的服务映射到不同的主机上

...- : n | ! ]
spec:
rul| O t ` * 9es:
- host: service_name1.example.com
http:
paths:
- path: /
backendL q & #  $:
serviceName: service_name1
s+ ? 0 i Z I m ( {ervicePort: 80
- host:T G M m i ) service_name2.example.com
http:
paths:
- path: /
backenF n 8 kd:
serviceName: service_name2
serv8 *  #icePort: 80

  对se* v Irvice_name1.example.com的请求转+ L ! B *发至service_name1服务上;对service_name2.example.com的请求转发至service_name2服务上;
  根据请求中的Host头L C ,控制器收到的请求将被转发到service_name1service_name2服务,DNS需要将service_namy d T +e1.example.comservice_name2.example.com域名指向Ingress控制器和IP地址。