OpenShift ::我们如何在自定义端口(非Web /非HTTP)上启用进入Pod的流量

时间:2019-01-24 12:17:32

标签: openshift openshift-origin openshift-client-tools openshift-enterprise

我们如何在自定义端口(非Web /非HTTP)上启用进入Pod的流量。

例如考虑端口12121。

我尝试通过路由公开端口。 但是无法从同一名称空间中的另一个Pod到达此Pod。

OpenShift是否支持此功能?

如果以前有人尝试过,请分享您如何实现这一目标。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用要添加的端口来自定义现有的router,也可以使用自定义的端口添加router。有关详细信息,请参见Customizing the Router Service Ports

  • 自定义路由器
    oc adm router --replicas=0 --ports='12121:12121,443:443' 
    oc set env dc/router ROUTER_SERVICE_HTTP_PORT=12121  \
                         ROUTER_SERVICE_HTTPS_PORT=443
    oc scale dc/router --replicas=1

    iptables -A INPUT -p tcp --dport 12121 -j ACCEPT

答案 1 :(得分:0)

根据您要实现的目标,您可以选择几种方法,但我不会为此使用路由。

  • 如果您不关心端口号是什么,则可以使用 NodePort 服务。 NodePort是集群管理员定义的一系列端口(默认为30000-32767),可以分配给服务,并且在集群的每个节点上公开,并且可用于TCP和UDP通信。此示例指定要使用的NodePort,但是如果您不提供节点端口,则服务控制器将分配一个可用的节点端口。
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30306
      name: http
  selector:
    name: mysql

OpenShift文档:https://docs.openshift.com/container-platform/3.11/dev_guide/expose_service/expose_internal_ip_nodeport.html

如果需要公开特定端口,则可以:

  • 使用 LoadBalancer 服务,该服务将允许您在负载均衡器IP上公开端口。请注意,这要求在集群中设置可用的IP列表(这是主服务器上的配置),并且IP被路由到集群中的节点(这可以通过OpenShift的ipfailover自动化实现)。
apiVersion: v1
kind: Service
metadata:
  name: egress-2 
spec:
  ports:
  - name: db
    port: 3306 
  loadBalancerIP:
  type: LoadBalancer 
  selector:
    name: mysql 

OpenShift文档:https://docs.openshift.com/container-platform/3.11/dev_guide/expose_service/expose_internal_ip_load_balancer.html

  • 理想情况下,您可以使用 hostport 并直接在运行Pod的主机上公开端口,但这仅在您要将流量路由到没有流量平衡的主机时才有效。这种方法违背了最佳做法,但可以作为最后的手段。
apiVersion: v1
kind: Pod
metadata:
  name: mysql
spec:
  containers:
  - image: mysql
    name: mysql
    ports:
    - name: mysql
      containerPort: 3306
      hostPort: 3306