规则
同一个ingressgateway实例(Pod)的同一个端口只能代理一种协议,并且是针对所有名称空间的,以先创建的gateway资源为准。
场景
在一个集群中提供业务访问的HTTP服务,还有要连接到数据库等TCP服务。
istio版本说明
client version: 1.9.5
control plane version: 1.9.5
data plane version: 1.9.5 (17 proxies)
实施方案
1. ingressgateway主进程增加新的监听端口,目前暂未找到方法。
2. 增加一个ingressgateway,http和tcp通过选择不同label分别绑定到不同的ingressgateway。
开始,使用方案2,配置IstioOperator资源清单:
vim file.yaml
apiVersion: install.istio.io/v1alpha1 # 修改原ingressgateway的配置(可选) # 创建一个新的ingressgateway enabled: true |
部署集群:
istioctl install -f file.yaml
注意事项:
1. 注意spec.profile指定你希望使用的基础配置 ,可使用“istioctl profile list”指令查看当前支持的配置,如不显式指定默认为default。
2. 两个ingressgateway的name必须不一样,且自定义的那个需要使用label重新定义一个标签,用于供gateway资源对象选择。
3. 使用spec.components.ingressGateways.k8s做些个性化设置,如以上配置,指定了pod运行节点,如果节点设置了污点,还要tolerations设置容忍度;service使用externalIPs在指定的node节点上暴露对外访问端口。
4. 自定义的那个ingressgateway一定要配置“enabled: true”,否则不会创建。
分别创建两个gateway资源对象,通过spec.selector选择不同的ingressgateway实例:
参考官方手册