2.2. 关于向集群外的流量公开服务
要启用来自 OpenShift 集群外部的流量访问网格中的服务,您必须通过将 Service
类型设置为 LoadBalancer
或使用 OpenShift Router 来公开网关代理。
使用 Kubernetes 负载均衡直接通过入站网关处理传入的流量,可减少与数据加密相关的延迟。通过在入站网关中管理加密,您可以避免在网格中通常会添加延迟的中间解密和重新加密步骤。这种方法允许只加密和解密一次网格流量,这通常效率更高。
OpenShift 路由器提供用于管理入口流量的标准方法,您可以使用路由器使用相同的方法管理所有集群入口流量的证书。但是,OpenShift 路由器在入站流量和网格应用之间引入了额外的跃点。通常,您可以通过在路由器中解密流量,然后在服务网格入口网关中重新加密它,从而带来延迟。
2.2.1. 使用 OpenShift 路由向集群外的流量公开网关
您可以使用 OpenShift 路由向集群外的流量公开网关。当您需要向集群外的流量公开网关时,此方法提供了使用 Kubernetes 负载均衡器服务的替代方案。
先决条件
- 您已完成了这个过程,使用 Istio 网关和 VirtualService 资源公开服务。
流程
运行以下命令,确保
Service
type 设置为ClusterIP
:$ oc patch service -n -p '{"spec": {"type": "ClusterIP"}}'
创建名为
httpbin-route.yaml
的 YAML 文件,为httpbin
服务定义Route
。apiVersion: route.openshift.io/v1 kind: Route metadata: name: httpbin namespace: <gateway_namespace> spec: host: httpbin.example.com port: targetPort: http2 to: kind: Service name: <gateway_name> weight: 100 wildcardPolicy: None
运行以下命令来应用 YAML 文件:
$ oc apply -f httpbin-route.yaml
验证
httpbin
服务是否可以通过入口路由器从集群外部访问。确保为集群在其中运行的环境正确设置了INGRESS_HOST
变量。如果集群在 AWS 上运行,请运行以下命令设置
INGRESS_HOST
变量:$ INGRESS_HOST=$(oc get service router-default -n openshift-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
如果集群在 GCP 或 Azure 上运行,请运行以下命令设置
INGRESS_HOST
变量:$ INGRESS_HOST=$(oc get service router-default -n openshift-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
运行以下命令,使用入口路由器的主机向
httpbin
服务发送curl
请求:$ curl -s -I -H Host:httpbin.example.com http://$INGRESS_HOST/headers
-
验证响应是否具有
HTTP/1.1 200 OK
状态,这表示请求是否成功。
其他资源