参考:
阿里云 - 健康检查概述
阿里云 - 使用SLB部署HTTPS业务(单向认证)
Github - Istio ingress-gateway support for health check #9385

https证书挂载

Istio Ingressgateway的健康检查是由一次Https证书切换引出的,先简单介绍Https证书的挂载位置。
https证书的设置位置可以有很多种,比如云SLB、Nginx、K8s Ingress、Istio Ingressgateway,公司原运维人员总喜欢把证书挂载Nginx上,即:

云SLB
Nginx + https
K8s Ingress
Istio Ingressgateway

而K8s Ingress和Istio Ingressgateway也都可以挂载证书,即:

云SLB
K8s Ingress + https
Istio Ingressgateway + https

但其实最推荐的方式还是把Https证书挂载到SLB上,减少代理层数提高通信效率(移除Nginx)且将Https验证交给SLB(降低应用集群格外的https验证负载)

云SLB + https
K8s Ingress
Istio Ingressgateway

而这次切换则将Https证书挂载到SLB上,以阿里云为例,效果如下:
在这里插入图片描述
即将SLB上443端口的流量都引入Istio Ingressgateway对应http端口,在SLB终结ssl的验证,而后SLB与后端服务通过http进行通信,以提供系统性能。

Istio Ingressgateway健康检查

在SLB将端口流量转发到后端服务器时,推荐的方式是提供后端服务的健康检查(配置健康检查能够让负载均衡自动排除健康状况异常的后端服务器),而此处将443端口的流量都转发到了Istio ingressgateway,而ingressgateway如何进行健康检查呢?
例如后端服务器组为
192.168.1.10:30080
192.168.1.11:30080
192.168.1.12:30080
而阿里SLB https协议只支持http形式(get | head)的健康检查(不支持tcp式的端口探测),如下图:
在这里插入图片描述
查看Istio Ingressgateway deployment配置会发现,其内部暴露–statusPort端口,且支持readiness检查
在这里插入图片描述
在这里插入图片描述
而SLB想利用这个httpGet检查,就需要将–statusPort 15020这个端口通过NodePort的方式暴露出来,进而查看istio-ingressgateway service定义发现istio在安装时已将该15020端口暴露为NodePort 3xxxx。
在这里插入图片描述

最终我们只需要在SLB配置对istio-ingressgateway service中暴露的NodePort进行健康检查即可,配置如下:

在这里插入图片描述
在这里插入图片描述

完成

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐