GKE接入服务
GKE accessing service
我正在尝试将一个 pod 连接到另一个 pod,但出现连接被拒绝的错误。
我只有运行:
RavenDB 服务器
- 部署有:
- 端口:
- 容器端口:8080,协议:TCP
- 容器端口:38888,协议:TCP
- 服务:
- ravendb-cluster01-服务
- 集群IP:None,端口:8080 / 38888
RavenDB 客户端
- 连接到 ravendb-cluster01-service.staging.svc.cluster.local:8080
- 虽然因连接被拒绝错误而失败
什么不起作用:
- 客户端无法连接到服务器,连接被拒绝
什么有效:
- 使用交互式 shell 访问客户端时:
docker -it ... -- bash
,
- 我可以 ping 服务
- 并远程登录到它
- 使用
kubectl ... port-forward 8080:8080
时,我可以在本地享受数据库服务器,所以服务器是运行ning
很奇怪,在访问 docker 时我能够连接到它,尽管 运行ning 脚本本身拒绝连接到目标 pod。
它是将pod连接到pod,并在目标服务器(RavenDB)上打上服务标签,不带服务IP地址,将域名解析为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
DB 的服务主机名错误,是否打错了?
ravendb-cluster01-service.namespace.svc.cluster.local
-> ravendb-cluster01-service.staging.svc.cluster.local
而且您最好检查运行您的数据库的节点主机上的固件规则 pods。
问题似乎出在您的 PublicServerUrl
设置上。
--PublicServerUrl=http://localhost:8080 --PublicServerUrl.Tcp=tcp://localhost:38888
根据 RavenDB 文档:
Set the URL to be accessible by clients and other nodes, regardless of which IP is used to access the server internally. This is useful when using a secured connection via https URL, or behind a proxy server.
您需要将其配置为服务名称,或者完全删除该选项。在查看 ServerUrl 的文档后,我个人建议将您的参数更新为如下内容:
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
理想地监听所有端口,因此设置为 0.0.0.0
对 PublicUrl 有意义。
它与 port-forward
和本地 docker 容器一起工作的原因可能是因为 RavenDB 正在监听环回设备,并且这两种连接方法都为您提供了一个本地进程容器,因此可以访问环回设备。
我正在尝试将一个 pod 连接到另一个 pod,但出现连接被拒绝的错误。
我只有运行:
RavenDB 服务器
- 部署有:
- 端口:
- 容器端口:8080,协议:TCP
- 容器端口:38888,协议:TCP
- 端口:
- 服务:
- ravendb-cluster01-服务
- 集群IP:None,端口:8080 / 38888
- 部署有:
RavenDB 客户端
- 连接到 ravendb-cluster01-service.staging.svc.cluster.local:8080
- 虽然因连接被拒绝错误而失败
- 连接到 ravendb-cluster01-service.staging.svc.cluster.local:8080
什么不起作用:
- 客户端无法连接到服务器,连接被拒绝
什么有效:
- 使用交互式 shell 访问客户端时:
docker -it ... -- bash
,- 我可以 ping 服务
- 并远程登录到它
- 使用
kubectl ... port-forward 8080:8080
时,我可以在本地享受数据库服务器,所以服务器是运行ning
很奇怪,在访问 docker 时我能够连接到它,尽管 运行ning 脚本本身拒绝连接到目标 pod。
它是将pod连接到pod,并在目标服务器(RavenDB)上打上服务标签,不带服务IP地址,将域名解析为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
DB 的服务主机名错误,是否打错了?
ravendb-cluster01-service.namespace.svc.cluster.local
-> ravendb-cluster01-service.staging.svc.cluster.local
而且您最好检查运行您的数据库的节点主机上的固件规则 pods。
问题似乎出在您的 PublicServerUrl
设置上。
--PublicServerUrl=http://localhost:8080 --PublicServerUrl.Tcp=tcp://localhost:38888
根据 RavenDB 文档:
Set the URL to be accessible by clients and other nodes, regardless of which IP is used to access the server internally. This is useful when using a secured connection via https URL, or behind a proxy server.
您需要将其配置为服务名称,或者完全删除该选项。在查看 ServerUrl 的文档后,我个人建议将您的参数更新为如下内容:
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
理想地监听所有端口,因此设置为 0.0.0.0
对 PublicUrl 有意义。
它与 port-forward
和本地 docker 容器一起工作的原因可能是因为 RavenDB 正在监听环回设备,并且这两种连接方法都为您提供了一个本地进程容器,因此可以访问环回设备。