OpenShift路由端口指定咨询:如何暴露非80/443的专用端口
当然可以!OpenShift的路由完全支持指定非80/443的专用端口,不用受限于默认端口。不过要注意,得先确保集群的Ingress Controller已经配置了监听你想要的自定义端口,否则路由创建后也无法正常访问。下面是具体的操作步骤和注意事项:
1. 确认Ingress Controller支持自定义端口
默认情况下,OpenShift的Ingress Controller只监听80(HTTP)和443(HTTPS)端口。要使用自定义端口,你需要修改IngressController资源,添加你想要暴露的端口:
比如,我们要添加8080(HTTP)和8443(HTTPS)端口,执行以下YAML配置:
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: endpointPorts: - name: http-custom port: 8080 protocol: HTTP - name: https-custom port: 8443 protocol: HTTPS
将上述内容保存为ingress-controller-custom-ports.yaml,然后执行:oc apply -f ingress-controller-custom-ports.yaml
等待Ingress Controller更新完成后,你可以通过以下命令验证端口是否已配置:oc get ingresscontroller/default -n openshift-ingress-operator -o jsonpath='{.spec.endpointPorts}'
2. 创建带自定义端口的路由
配置好Ingress Controller后,就可以创建指向自定义端口的路由了,这里有两种方式:
方式一:使用oc命令直接创建
假设你有一个名为my-service的服务,它暴露了8080端口,现在要创建一个路由,将集群的8080端口映射到服务的8080端口:oc create route edge --service=my-service --port=8080 --hostname=my-app.example.com --tls-termination=edge --insecure-policy=Redirect
参数说明:
--port=8080: 指定路由要关联的服务端口--hostname: 你的自定义域名(如果不需要可以省略)--tls-termination=edge: 配置TLS终止在Ingress Controller(根据你的需求选择合适的TLS策略)
方式二:使用YAML配置文件创建
创建一个custom-port-route.yaml文件,内容如下:
apiVersion: route.openshift.io/v1 kind: Route metadata: name: my-custom-port-route spec: host: my-app.example.com port: targetPort: 8080 # 服务暴露的端口 tls: termination: edge insecureEdgeTerminationPolicy: Redirect to: kind: Service name: my-service weight: 100 wildcardPolicy: None
然后执行:oc apply -f custom-port-route.yaml
3. 验证路由是否生效
创建完成后,你可以通过以下命令查看路由的详细信息,确认端口配置正确:oc get route my-custom-port-route -o yaml
之后就可以通过http://my-app.example.com:8080(或HTTPS的8443端口)访问你的应用了。
额外注意事项
- 防火墙配置: 确保集群节点的防火墙已经开放了你指定的自定义端口,否则外部无法访问。
- 负载均衡器: 如果你的集群使用了外部负载均衡器,需要将自定义端口添加到负载均衡器的转发规则中。
- 域名解析: 如果使用了自定义hostname,要确保域名已经正确解析到Ingress Controller的入口IP(或负载均衡器IP)。
内容的提问来源于stack exchange,提问作者Geoffrey

