我是 Kubernetes / OCP 世界的新手,并将我的应用程序部署到OCP命名空间,并尝试连接到也在相同命名空间中的 gemfire 服务器。要访问,我创建了ClusterIP
Service
:ocp-gemfire
。此服务公开10334
和40404
端口,并且下划线容器中公开相同的端口。
我的期望是,当我通过此服务时,它应该从我的应用程序进行连接,如下所示:
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
答案 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
连接字符串连接到它们,这当然是不可能的。