Ingress

Ingress是另一种资源,与Service资源不同。

Ingress资源与Service资源可以是一对多,即Ingress对象只需要一个公网IP,就能为多个Service提供访问,架构如下:

通过一个Ingress暴露多个Service

Ingress工作在应用层(HTTP),因此可以提供基于cookie的会话亲和性(session affinity)等功能。

Tips: 因为Service对象默认是工作在传输层(TCP、UDP),因此无法提供基于HTTP的相关功能。

创建Ingress

下面展示了一个创建Ingress的YAML配置文件:

访问Ingress

假设通过kubectl get ingresses查看Ingress资源对象的相关信息如下(此处的Ingress后端只有一个Service,且将该Service映射的路径为http://kubia.example.com/):

Tips: ADDRESS即Ingress监听的地址,HOSTS为映射的路径列表,若在配置文件中映射了多个host,那么这里都会显示出来。

在生成名为kubia的Ingress资源对象后,在客户端所在的DNS列表中,需要加上如下的解析条目:

然后,通过在客户端中访问http://kubia.example.com即可间接访问到Service。

Ingress处理TLS传输

这里的Ingress处理TLS传输,是指客户端与Ingress控制器之间,控制器和Pod之间还是通过HTTP传输。

通过下面两步可以实现目标:

  1. 创建私钥和证书;

  2. 创建包含私钥和证书的Secret资源;

  3. 将Secret对象绑定至Ingress对象中;

创建私钥和证书

使用openssh命令创建私钥,文件名为tls.key

使用openssl命令创建证书,文件名为tls.cert

创建Secret资源

这里直接使用命令创建tls类型的Sercret资源,该资源包含刚刚创建的私钥和证书文件,资源名为tls-secret

将Secret资源绑定至Ingress对象中

查看Secret资源,可以看到PORTS列中多了一个443端口,即HTTPS:

访问Ingress

现在可以通过HTTPS访问Ingress资源:

Tips: -k--insecure,以非安全模式访问

Last updated

Was this helpful?