2.7.3. 管理入口流量
在 Red Hat OpenShift Service Mesh 中,Ingress Gateway 允许监控、安全性和路由规则等功能应用到进入集群的流量。使用 Service Mesh 网关在服务网格外公开服务。
2.7.3.1. 决定入口 IP 和端口
入口配置根据您的环境是否支持外部负载均衡器而有所不同。在集群的入口 IP 和端口中设置一个外部负载均衡器。要确定是否为外部负载均衡器配置了集群的 IP 和端口,请运行以下命令。在本例中,istio-system
是 Service Mesh control plane 项目的名称。
$ oc get svc istio-ingressgateway -n istio-system
该命令会返回命名空间中每个项目的 NAME
、TYPE
、CLUSTER-IP
、EXTERNAL-IP
、PORT(S)
和 AGE
。
如果设置了 EXTERNAL-IP
值,您的环境会有一个外部负载均衡器,供您用于入口网关。
如果 EXTERNAL-IP
值是 <none>
,或 <pending>
,则您的环境不会为入口网关提供外部负载均衡器。您可以使用服务的节点端口访问网关。
2.7.3.1.1. 使用负载均衡器确定入口端口
如果您的环境有外部负载均衡器,请按照以下步骤操作。
流程
运行以下命令来设置入口 IP 和端口。此命令在终端中设置变量。
$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
运行以下命令来设置入口端口。
$ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
运行以下命令来设置安全入口端口。
$ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
运行以下命令来设置 TCP 入口端口。
$ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].port}')
在某些情况下,负载均衡器可能会使用主机名而不是 IP 地址公开。在这种情况下,入口网关的 EXTERNAL-IP
值不是一个 IP 地址。相反,这是一个主机名,上一命令无法设置 INGRESS_HOST
环境变量。
在这种情况下,使用以下命令更正 INGRESS_HOST
值:
$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
2.7.3.1.2. 确定没有负载均衡器的入口端口
如果您的环境没有外部负载均衡器,请确定入口端口并改用节点端口。
流程
设置入口端口。
$ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
运行以下命令来设置安全入口端口。
$ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
运行以下命令来设置 TCP 入口端口。
$ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')