我在Mac上使用以下版本设置了OpenShift环境:
Mac OS Sierra, Version:10.12.2 (16C67)
oc v1.5.0-alpha.2+e4b43ee
kubernetes v1.5.2+43a9be4
features: Basic-Auth
我能够通过执行oc cluster up
来运行开发人员版本,并为developer
用户授予管理权限。接下来,我通过发出以下命令添加postgres
容器:
oc new-app https://github.com/MojoJojo/authenticated-payments.git --name="postgres-keycloak" -l name="postgres-keycloak" --context-dir=postgres-keycloak
该命令按预期工作,并创建了一个Cluster Hostname
和Cluster IP
地址的服务。管理控制台中的“群集主机名”反映为:
~ ❯❯❯ oc describe service/postgres-keycloak
Name: postgres-keycloak
Namespace: authenticated-collections
Labels: app=postgres-keycloak
name=postgres-keycloak
Selector: app=postgres-keycloak,deploymentconfig=postgres-keycloak,name=postgres-keycloak
Type: ClusterIP
IP: 172.30.123.160
Port: 5432-tcp 5432/TCP
Endpoints:
Session Affinity: None
No events.
~ ❯❯❯ oc describe pods/postgres-keycloak-2-8r9n5 ⏎
Name: postgres-keycloak-2-8r9n5
Namespace: authenticated-collections
Security Policy: restricted
Node: 192.168.65.2/192.168.65.2
Start Time: Mon, 23 Jan 2017 03:24:41 +0200
Labels: app=postgres-keycloak
deployment=postgres-keycloak-2
deploymentconfig=postgres-keycloak
name=postgres-keycloak
Status: Running
接下来,我创建了另一个容器,如下所示:
oc new-app https://github.com/MojoJojo/authenticated-payments.git --name="jboss-keycloak" -l name="jboss-keycloak" --context-dir=jboss-keycloak
上面的Git存储库有一个Dockerfile
,它声明了以下环境变量:
POSTGRES_PORT_5432_TCP_ADDR=postgres-keycloak.authenticatedcollections.svc.cluster.local
POSTGRES_PORT_5432_TCP_PORT=5432
我验证了并且在第二个容器中正确设置了上述环境变量。 问题是第二项服务无法连接到&postffres-keycloak'第一个容器中的数据库。
经过进一步调查,我发现虽然我可以ping通POD,群集IP和群集主机名,但psql
客户端只有在我直接使用pod的IP地址时才能连接。到目前为止,我的结论是DNS解析工作正常 - 只是服务配置看起来有点搞砸了。似乎服务代理不将请求转发到容器。
另外,我不确定上述摘录中Endpoint
计数(零)是否是导致问题的原因?我的理解是Endpoints
仅在从集群外部访问服务时使用。
我已尝试安装其他服务(如网络服务器)进行测试,但似乎Cluster Hostnames
或IP地址都不起作用。
我非常感谢帮助解决问题并解决此问题的任何提示,提示和指示。
感谢您的帮助。
答案 0 :(得分:0)
在您的情况下,我看到命名空间为authenticated-collections
,但在使用authenticatedcollections
的env变量中。
我认为它应该是这样的:
POSTGRES_PORT_5432_TCP_ADDR=postgres-keycloak.authenticated-collections.svc.cluster.local
这只是一个错字或错误配置? 另外,我假设两个pod都运行在同一个项目中。