当前位置: 首页 > 知识库问答 >
问题:

使用 openshift 外部服务定位外部 REST API

卫君博
2023-03-14

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

我设法通过ConfigMap做到了这一点,但我看到也可能通过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
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中,使用endpoint中定义的地址是有效的,但是使用环境变量中的地址:

EXAMPLE_EXTERNAL_SERVICE_SERVICE_HOST=172.30.51.168

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

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

干杯。

共有1个答案

樊胜
2023-03-14

在endpoint配置中,将端口80的名称(< code >“80”)更改为< code>http。它需要与服务配置中的相同。

 类似资料:
  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”-> “外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。按住 Control 键并点按外部服务器对象列表的任意位置,然后选择“安装 postgres_fdw 扩展”。 外

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计

  • 此功能的状态是实验性的。我们欢迎您对此功能的实用性的反馈。我们可能会在未来发展这个功能,使其更加通用。虽然我们将努力确保向后兼容性,但不能保证。 场景 在某些情况下,希望能够从交易处理函数中调用REST API。这使你可以将区块链中的复杂计算移出。调用REST API允许交易处理器功能将复杂或昂贵的计算外包给中央或peer托管的服务。 调用外部REST服务 post(url,data)函数可用于交

  • 假设我有一个不在Kubernetes上托管的服务。我还在kubernetes集群上设置了入口控制器和证书管理器。 因为使用kubernetes入口来控制对服务的访问非常简单,所以我想要一个指向非kubernetes服务的kubernetes入口。 例如,我有一个托管在<代码>https://10.0.40.1:5678(需要ssl,但需要自签名证书),并希望访问服务。实例com。

  • 我正在尝试用MiniKube在azure VM上从外部运行和访问Hello节点服务。 minikube启动--Driver=VirtualBox 已创建部署 kubectl创建部署hello-node--image=k8s.gcr.io/echoServer 公开部署 kubectl公开部署hello-node--type=loadbalancer--port=8080 假设kubectl get