当前位置: 首页 > 知识库问答 >
问题:

GKE访问服务

仰欣悦
2023-03-14

我正在尝试将一个pod连接到另一个pod,但获得连接拒绝错误。

我只运行:

>

  • RavenDB服务器

    • 部署包括:
      • 端口:
        • 容器端口:8080,协议:TCP
        • containerPort:38888,协议:TCP
        • ravendb-cluster01-service

        RavenDB客户端

        • 连接到ravendb-cluster01-service。登台。svc。簇本地电话:8080

        什么不起作用:

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

        什么有效:

        • 使用交互式shell访问客户端pod时:docker-it…--bash,
          • 我可以ping服务
          • 和远程登录

          奇怪的是,当访问docker时,我能够连接到它,尽管运行的脚本本身拒绝连接到目标pod。

          它将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
          

  • 共有2个答案

    梁丘书
    2023-03-14

    DB的服务主机名错误,是不是输入错误?

    ravendb-cluster01-service.namespace.svc.cluster.local
    
    -> ravendb-cluster01-service.staging.svc.cluster.local
    

    您最好检查运行DB吊舱的节点主机上的FW规则。

    陆和泰
    2023-03-14

    问题似乎是您的PublicServerUrl设置。

    --PublicServerUrl=http://localhost:8080 --PublicServerUrl.Tcp=tcp://localhost:38888
    

    根据RavenDB留档:

    将URL设置为可由客户端和其他节点访问,无论使用哪个IP在内部访问服务器。当通过https URL或在代理服务器后面使用安全连接时,这很有用。

    您要么需要将其配置为服务名称,要么完全删除该选项。在查看了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
    

    理想情况下,您希望服务器URL侦听所有端口,因此设置为0.0.0.0对PublicUrl来说是有意义的。

    它与端口转发和本地docker容器一起工作的原因可能是因为RavenDB正在侦听环回设备,并且这两种连接方法都为您提供了容器内的本地进程,因此可以访问环回设备。

     类似资料:
    • 当使用NodePort服务和Kubernetes入口公开时,SFTP服务器不可访问。但是,如果使用LoadBalancer类型的服务公开相同的部署,它就可以正常工作。 然而,我尝试使用GKE Ingress公开相同的部署,但它不起作用。以下是入口的清单: 将外部IP分配给入口后(我知道完全设置需要几分钟),开始工作,但不工作。 下面是我从服务器得到的错误: 在上面的设置中,我做错了什么?为什么Lo

    • 我有两个集群, 一个集群安装了我的应用程序微服务,另一个集群安装了Strimzi kafka。两者都是私有的GKE集群。 我的挑战是如何从我的应用程序连接到这个 kafka。大约有 10 个微服务正在运行,每个微服务都必须连接到 kafka。 我现在有一种方法,将Strimzi kafka作为Nodeport服务,并在应用程序代码中提供Ip和nodeIp。 这种方法的问题在于,如果 GKE 节点自

    • WebDAV的全称是“Web-base Distributed Authoring and Versioning”。它是HTTP协议的扩展,允许我们在远程管理和编辑Web服务器上的文件。现在很多Web服务器都支持WebDAV,包括最有名的Apache和Zope。要访问WebDAV服务,需要安装客户端,这里介绍的一个工具叫Cadaver,它是一个字符界面的工具,类似于FTP。支持文件的上传、下载和在

    • 我有两个不同的微服务,将尤里卡作为服务注册表,现在我正在尝试从另一个微服务调用微服务,解析带有功能区的endpoint以进行客户端负载平衡。 服务A: 此服务公开一个终结点,并且应用程序.yml 如下所示: 调用服务A的服务B具有以下应用程序类: 控制器 服务 但我在尝试访问服务时遇到了一个异常: 对此有什么建议吗?

    • 在开发机的Web服务器上托管一个站点,然后在Android设备上访问站点内容。 通过USB数据线和Chrome DevTools,您可以在开发机上运行站点,然后在Android设备上查看该网站。 TL;DR 端口转发可以使你在Android设备上查看开发机Web服务器中的内容。 如果你的Web服务器使用自定义域,您可以将Android设备设置为使用自定义域映射访问该域中的内容。 设置端口转发 端口

    • 我在GKE上设置了Istio(Kubernetes入口模式,而不是Istio网关)。但是,我无法使用curl从外部访问 istio ingressgateway LoadBalancer 10.48.11.240 35.222.111.100 15020:30115/TCP,80:31420/TCP,443:32019/TCP,31400:31267/TCP,15029:30180/TCP,150