【问题标题】:Targetting external REST API using openshift external service使用 openshift 外部服务定位外部 REST API
【发布时间】:2018-06-15 20:40:06
【问题描述】:

我希望托管在 Openshift 集群中的应用程序以外部 REST API 为目标,而无需在客户端应用程序中硬编码 IP/PORT,并且还能够在不重新交付应用程序的情况下更改 IP/PORT。

我设法通过 ConfigMap 做到了,但我看到它也可以通过 Service in OpenShift doc 做到。

但是我没能理解它是如何工作的。我做了以下事情:

创建服务

sylvain@HP:~$ oc export svc example-external-service
apiVersion: v1
kind: Service
metadata:
   creationTimestamp: null
   name: example-external-service
 spec:
   ports:
   - name: http
     port: 80
     protocol: TCP
     targetPort: 80
   sessionAffinity: None
   type: ClusterIP
 status:
   loadBalancer: {}

创建端点

sylvain@HP:~$ oc export endpoints example-external-service
apiVersion: v1
kind: Endpoints
metadata:
  creationTimestamp: null
  name: example-external-service
subsets:
- addresses:
  - ip: 216.58.198.195
  ports:
  - name: "80"
    port: 80
    protocol: TCP

从运行我的应用程序的 POD 对我的服务进行 curl

sylvain@HP:~$ oc get pods
NAME                     READY     STATUS    RESTARTS   AGE
nodejs-example-1-qnq46   1/1       Running   0          36m
sylvain@HP:~$ oc rsh nodejs-example-1-qnq46
sh-4.2$ env | grep "EXAMPLE_EXTERNAL"
EXAMPLE_EXTERNAL_SERVICE_SERVICE_PORT_HTTP=80
EXAMPLE_EXTERNAL_SERVICE_SERVICE_PORT=80
EXAMPLE_EXTERNAL_SERVICE_PORT_80_TCP_PORT=80
EXAMPLE_EXTERNAL_SERVICE_SERVICE_HOST=172.30.51.168
EXAMPLE_EXTERNAL_SERVICE_PORT_80_TCP_ADDR=172.30.51.168
EXAMPLE_EXTERNAL_SERVICE_PORT_80_TCP_PROTO=tcp
EXAMPLE_EXTERNAL_SERVICE_PORT=tcp://172.30.51.168:80
EXAMPLE_EXTERNAL_SERVICE_PORT_80_TCP=tcp://172.30.51.168:80
sh-4.2$ curl 172.30.51.168
curl: (7) Failed connect to 172.30.51.168:80; No route to host
sh-4.2$ curl 216.58.198.195
<HTML><HEAD><meta http-equiv="content-type" content="text/html;     charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML>
sh-4.2$ 

在第一个 curl 中使用端点中定义的地址是有效的,但是使用环境变量中的地址:

EXAMPLE_EXTERNAL_SERVICE_SERVICE_HOST=172.30.51.168

它失败了,所以路由没有正确完成。

我做错了什么?我错过了什么?

干杯

【问题讨论】:

    标签: docker kubernetes openshift openshift-origin


    【解决方案1】:

    在您的端点配置中,将端口 80 ("80") 的名称更改为 http。它需要与服务配置中的相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多