我正在尝试将一个Pod连接到另一个Pod,但是出现连接被拒绝的错误。
我只跑:
RavenDB服务器
RavenDB客户端
什么不起作用:
有效的方法:
docker -it ... -- bash
访问客户端窗格时,
kubectl ... port-forward 8080:8080
时,我可以在本地使用数据库服务器,因此该服务器正在运行奇怪的是,尽管正在运行的脚本本身拒绝连接到目标容器,但是访问泊坞窗时我能够连接到它。
它将Pod连接到Pod,并使用不带服务IP地址的服务标记目标服务器(RavenDB),以将域名解析为Pod的当前IP地址。
知道我在做什么错吗?
完整配置:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: ravendb-cluster01
tier: backend
name: ravendb-cluster01
namespace: staging
spec:
replicas: 1
selector:
matchLabels:
app: ravendb-cluster01
tier: backend
template:
metadata:
labels:
app: ravendb-cluster01
tier: backend
name: ravendb-cluster01
namespace: staging
spec:
containers:
- env:
- name: RAVEN_ARGS
value: --ServerUrl=http://ravendb-cluster01-service.staging.svc.cluster.local:8080
--ServerUrl.Tcp=tcp://ravendb-cluster01-service.staging.svc.cluster.local:38888
--PublicServerUrl=http://localhost:8080 --PublicServerUrl.Tcp=tcp://localhost:38888
--DataDir=/ravendb/ --Setup.Mode=None --License.Eula.Accepted=true
image: ravendb/ravendb-nightly:4.0.6-nightly-20180720-0400-ubuntu.16.04-x64
name: ravendb
ports:
- containerPort: 8080
name: http
protocol: TCP
- containerPort: 38888
name: tcp
protocol: TCP
resources:
limits:
memory: 26000Mi
requests:
memory: 26000Mi
volumeMounts:
- mountPath: /ravendb/
name: ravendb-cluster01-storage
volumes:
- gcePersistentDisk:
fsType: ext4
pdName: ravendb-cluster01-storage
name: ravendb-cluster01-storage
---
apiVersion: v1
kind: Service
metadata:
labels:
app: ravendb-cluster01-service
tier: backend
name: ravendb-cluster01-service
namespace: staging
spec:
clusterIP: None
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
- name: tcp
port: 38888
protocol: TCP
targetPort: 38888
selector:
app: ravendb-cluster01
tier: backend
sessionAffinity: None
type: ClusterIP
答案 0 :(得分:4)
问题似乎出在您的PublicServerUrl
设置上。
--PublicServerUrl=http://localhost:8080 --PublicServerUrl.Tcp=tcp://localhost:38888
根据RavenDB文档:
将URL设置为可由客户端和其他节点访问,而不管内部使用哪个IP访问服务器。当通过https URL或在代理服务器后面使用安全连接时,这很有用。
您需要将其配置为服务名称,或者完全删除该选项。在查看了ServerUrl的文档之后,我个人建议将您的args更新为类似以下内容:
value: --ServerUrl=http://0.0.0.0:8080
--ServerUrl.Tcp=tcp://0.0.0.0:38888
--PublicServerUrl=http://ravendb-cluster01-service.staging.svc.cluster.local:8080 --PublicServerUrl.Tcp=tcp://ravendb-cluster01-service.staging.svc.cluster.local:38888
--DataDir=/ravendb/ --Setup.Mode=None --License.Eula.Accepted=true
您希望ServerUrl
理想地在所有端口上进行侦听,因此对于PublicUrl而言,将0.0.0.0
设置为有意义。
它可以与port-forward
以及从本地docker容器一起使用的原因可能是因为RavenDB正在侦听回送设备,并且这两种连接方法都为您提供了容器内部的本地进程,因此回送设备可以访问。
答案 1 :(得分:0)
DB的服务主机名错误,是拼写错误吗?
ravendb-cluster01-service.namespace.svc.cluster.local
-> ravendb-cluster01-service.staging.svc.cluster.local
并且最好检查运行DB Pod的节点主机上的FW规则。