Ingress是另一种资源,与Service资源不同。
Ingress资源与Service资源可以是一对多,即Ingress对象只需要一个公网IP,就能为多个Service提供访问,架构如下:
Ingress工作在应用层(HTTP),因此可以提供基于cookie的会话亲和性(session affinity)等功能。
创建Ingress
下面展示了一个创建Ingress的YAML配置文件:
apiVersion: extensions/v1beta1
kind: Ingress # 资源类型是Ingress
metadata:
name: kubia
spec:
tls: # 当需要使用TLS时,也就是客户端通过HTTPS与Ingress控制器交互时,才需要加
- hosts:
- kubia.example.com # 将接收访问kubia.example.com主机的TLS连接
secretName: tls-secret # 存放了TLS私钥和证书的Secret资源名
rules:
- host: kubia.example.com
http: # 转发HTTP流量
paths:
- path: /kubia # 将kubia.example.com/kubia的请求转发至kubia服务
backend:
serviceName: kubia # 后端的Service名
servicePort: 80 # Service暴露的Port
- path: /foo # 将kubia.example.com/foo的请求转发至bar服务
backend:
serviceName: bar # 后端的Service名
servicePort: 80
- host: foo.example.com
http:
paths:
- path: /foo # 将foo.example.com/foo的请求转发至foo服务
backend:
serviceName: foo # 后端的service名
servicePort: 80
访问Ingress
假设通过kubectl get ingresses
查看Ingress资源对象的相关信息如下(此处的Ingress后端只有一个Service,且将该Service映射的路径为http://kubia.example.com/
):
>>> get ingresses -o wide
NAME HOSTS ADDRESS PORTS AGE
kubia kubia.example.com 192.168.99.106 80 39s
在生成名为kubia
的Ingress资源对象后,在客户端所在的DNS列表中,需要加上如下的解析条目:
192.168.99.106 kubia.example.com
然后,通过在客户端中访问http://kubia.example.com
即可间接访问到Service。
Ingress处理TLS传输
这里的Ingress处理TLS传输,是指客户端与Ingress控制器之间,控制器和Pod之间还是通过HTTP传输。
通过下面两步可以实现目标:
创建私钥和证书
使用openssh
命令创建私钥,文件名为tls.key
:
openssl genrsa -out tls.key 2048
使用openssl
命令创建证书,文件名为tls.cert
:
openssl req -new -x509 -key tls.key -out -tls.cert -days 360 -subj /CN=kubia.example.com
创建Secret资源
这里直接使用命令创建tls类型
的Sercret资源,该资源包含刚刚创建的私钥和证书文件,资源名为tls-secret
:
kubectl create secret tls tls-secret --cert=tls.cert --key=tls.key
将Secret资源绑定至Ingress对象中
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubia
spec:
tls: # 使用TLS连接
- hosts:
- kubia.example.com # 接收访问kubia.example.com的TLS连接
secretName: tls-secret # 需要绑定的Secret资源的名字
rules:
- host: kubia.example.com
http:
paths:
- path: /
backend:
serviceName: kubia-nodeport
servicePort: 80
查看Secret资源,可以看到PORTS
列中多了一个443
端口,即HTTPS:
NAME HOSTS ADDRESS PORTS AGE
kubia kubia.example.com 192.168.99.106 80, 443 17h
访问Ingress
现在可以通过HTTPS访问Ingress资源:
curl -k https://kubia.example.com