gpt4 book ai didi

c# - GKE接入服务

转载 作者:行者123 更新时间:2023-11-30 20:25:33 25 4
gpt4 key购买 nike

我正在尝试将一个 pod 连接到另一个 pod,但出现连接被拒绝的错误。

我只跑:

  1. RavenDB 服务器

    • 部署有:
      • 端口:
        • 容器端口:8080,协议(protocol):TCP
        • 容器端口:38888,协议(protocol):TCP
    • 服务:
      • ravendb-cluster01-服务
      • 集群 IP:无,端口:8080/38888
  2. RavenDB 客户端

    • 连接到 ravendb-cluster01-service.staging.svc.cluster.local:8080
      • 尽管因连接被拒绝错误而失败

什么不起作用:

  • 客户端无法连接到服务器,连接被拒绝

什么有效:

  • 使用交互式 shell 访问客户端 pod 时:docker -it ... -- bash
    • 我可以 ping 服务
    • 并远程登录到它
  • 当使用kubectl ... port-forward 8080:8080时,我可以在本地使用数据库服务器,因此服务器正在运行

奇怪的是,在访问 docker 时我能够连接到它,尽管正在运行的脚本本身拒绝连接到目标 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

最佳答案

问题似乎出在您的 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 正在监听环回设备,并且这两种连接方法都为您提供容器内的本地进程, 所以环回设备是可访问的。

关于c# - GKE接入服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51500542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com