Openshift / OCP->无法解析同一名称空间中的主机名。服务正在映射到无法解析的POD名称

时间:2020-08-03 21:20:59

标签: kubernetes open-closed-principle

我是 Kubernetes / OCP 世界的新手,并将我的应用程序部署到OCP命名空间,并尝试连接到也在相同命名空间中的 gemfire 服务器。要访问,我创建了ClusterIP Serviceocp-gemfire。此服务公开1033440404端口,并且下划线容器中公开相同的端口。 我的期望是,当我通过此服务时,它应该从我的应用程序进行连接,如下所示:

ocp-gemfire/xx.xx.xx.xx(Service IP):10334
ocp-gemfire/xx.xx.xx.xx(Service IP):40404

但是正在发生的是,它映射到下划线Pod名称而不是IP。我可以通过两个端口上的应用程序远程登录IP或服务名称;但是此Pod名称无法解析。

我不确定为什么它映射到Pod名称而不是IP?

2020-08-03 16:55:20 INFO  - AutoConnectionSource discovered new locators [myapp-gemfire-1-9npl6:10334]
2020-08-03 16:55:20 WARN  - Could not connect to: myapp-gemfire-1-9npl6:40404
java.net.UnknownHostException: myapp-gemfire-1-9npl6

我的服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: ${APPLICATION_NAME}-gemfire
  name: ${APPLICATION_NAME}-gemfire
  namespace: ${PROJECT_NAMESPACE}
spec:
  type: ClusterIP
  ports:
    - name: 10334-tcp
      port: 10334
      protocol: TCP
      targetPort: 10334
    - name: 40404-tcp 
      port: 40404
      protocol: TCP
      targetPort: 40404
  selector:
    app: ${APPLICATION_NAME}-gemfire
    deploymentconfig: ${APPLICATION_NAME}-gemfire

1 个答案:

答案 0 :(得分:0)

您可以阅读here

通常,一个Pod具有以下DNS解析:

pod-ip-address.my-namespace.pod.cluster-domain.example

例如,如果default命名空间中的容器具有IP地址 172.17.0.3,您的群集的域名为cluster.local,则Pod的DNS名称为:

172-17-0-3.default.pod.cluster.local

由服务公开的Deployment或DaemonSet创建的任何Pod 具有以下可用的DNS解析:

pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example

因此,您尝试通过Pod来解析DNS名称的尝试注定会从一开始就失败。

您可能想看看my other answer,它涉及非常相似的主题。

首先,您的应用程序根本不应引用您的Pods名称。为了与您的Pods保持联系,应仅使用Service。它可能是简写形式。如果Service名称与您要与其连接的Pods部署在相同的命名空间中,或者如果FQDN与您的Pods位于不同的命名空间中,则名称就足够了

也许我在这里不太了解...

2020-08-03 16:55:20 INFO  - AutoConnectionSource discovered new locators [myapp-gemfire-1-9npl6:10334]
2020-08-03 16:55:20 WARN  - Could not connect to: myapp-gemfire-1-9npl6:40404
java.net.UnknownHostException: myapp-gemfire-1-9npl6

,但是上面的错误消息似乎来自您的应用程序。那么,当您从另一个Pod远程登录到Service这是FQDN还是群集IP时,发生了什么呢?您应该被重定向到Pods之一。您是否收到类似消息,提示您的Pod名称无法解析?

我很确定您的Service正确地映射到您的Pods,因为它使用了引擎盖下的标签。因此,即使Pod被销毁,也将创建另一个,并且它可以在完全不同的IP和名称下使用,Service会注意更新端点列表,以便始终将您的流量定向到选定的{{1 }}(由Pods定义中的选择器选择,该定义使用那些Service标签)。

关于您的Pods定义,它看起来是正确的,在任何情况下都不应简单地映射到您的Service名称,因为这将与kubernetes本身的设计相矛盾,对吗?如果Pod名称无法定义,那么作为解决方案一部分的Pod使用的Service名称却无法解析。

我认为来自您的应用程序的错误消息显示出一些不同,好像您的Pods通过其名称向此应用程序广告,而不是您的应用程序尝试通过解析此名称来连接到他们,这当然是无法做到的。< / p>

简单的Google搜索短语Pod足以说明它是process typical to gemfire,因此与 Kubernetes / Openshift 没有直接关系。因此,我们可以在这里看到:

AutoConnectionSource discovered new locators

由于某种原因,此发现使用简单的AutoConnectionSource discovered new locators [myapp-gemfire-1-9npl6:10334] 名称,并尝试使用Pod连接字符串连接到它们,这当然是不可能的。