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

Kubernetes吊舱如何连接到与主机在同一本地网络(集群外)中运行的数据库?

漆雕奇
2023-03-14

我有一个库伯内特斯集群(K8s)运行在物理服务器A(内部网络IP192.168.200.10)和一个PostgreSQL数据库运行在另一个物理服务器B(内部网络IP192.168.200.20)中。如何使我的Java应用程序容器(pod)能够连接到服务器B中的PostgreSQL数据库?

操作系统:Ubuntu v16。04 Docker 18.09.7 Kubernetes v1。15.4印花棉布v3。8.2吊舱底座图片:openjdk:8-jre-alpine

我试着按照这个例子创建一个服务和endpoint

kind: Service
apiVersion: v1
metadata:
 name: external-postgres
spec:
 ports:
 - port: 5432
   targetPort: 5432
---
kind: Endpoints
apiVersion: v1
metadata:
 name: external-postgres
subsets:
 - addresses:
     - ip: 192.168.200.20
   ports:
     - port: 5432

我的JDBC连接字符串是:JDBC:postgresql://external-postgres/MY_APPDB,但它不起作用。pod无法使用所述内部IP或ping外部postgres服务名称ping服务器B或telnet数据库。我不希望使用“hostNetwork:true”或通过公共IP连接服务器B。

任何建议都将不胜感激。谢谢

共有2个答案

朱啸
2023-03-14

我想你可以替换CALICO_IPV4POOL_CIDR,而不会通过kubeadm构建器工具重新生成K8s集群,也许在某些情况下它会很有用。

删除当前的Calico CNI插件安装,例如:

$kubectl delete-fhttps://docs.projectcalico.org/v3.8/manifests/calico.yaml

安装Calico CNI插件,为Calico_IPV4POOL_CIDR参数提供所需值:

$curl-khttps://docs.projectcalico.org/v3.8/manifests/calico.yaml--输出一些_文件。亚马尔

重新旋转CoreDNS吊舱:

$kubectl删除pod--selector=k8s-app=库贝-dns-n库贝-system

等待CoreDNS播客从新网络CIDR池获得IP地址。

龙飞
2023-03-14

我刚刚发现问题是因为K8s网络与服务器本地网络(192.168.200.x)子网冲突在K8s集群初始化期间,必须将cidr 192.168.0.0/16的IP范围更改为其他内容,例如10.123.0.0/16
,并且必须在calico中更改此IP范围。应用Calico插件之前的yaml文件

# The default IPv4 pool to create on startup if none exists. Pod IPs will be
# chosen from this range. Changing this value after installation will have
# no effect. This should fall within `--cluster-cidr`.
  - name: CALICO_IPV4POOL_CIDR
    value: "10.123.0.0/16"

重置后,现在可以ping和telnet服务器B,并使用不同的CIDR重新初始化K8s群集。

 类似资料:
  • 我可以看到这两个IP,我试图连接使用tcp套接字,绑定他们与tcp端口8080。然而,它表明它没有连接。 我认为这不是使用tcp套接字连接它们的方式。是否有任何方法使一个pod服务器和其他pod客户端和conncet使用tcp套接字。 编辑: Client.C

  • 我正在使用一个安装了docker的docker映像,为了运行任务来清理我的kubernetes集群中每个节点上的docker映像数据。我尝试使用Daemonset,因为它将在除master之外的每个节点上运行,但是在docker容器中运行cron被证明是徒劳的。 因此,我尝试使用K8s Cronjob,它定期运行,具有以下属性: 和 我正在运行一个 shell 脚本,该脚本从上述 CronJob

  • 我有一个在生产集群中运行的豆荚。该吊舱是为了调试目的,我想嗅探主机网络流量。出于安全原因,我无法在主机网络中部署该pod。 是否可以从Kubernetes中的非主机网络吊舱嗅探主机网络通信量?

  • 我对AWS上POD之间的跨集群通信有疑问。 我正在使用kubernetes在AWS上部署集群。两个星团位于同一区域和AZ。两个集群都部署在各自的VPC中,子网不重叠。我已经成功创建了VPC对等,以在两个VPC之间建立通信。VPC的仆从(实例)可以通过私有IP相互ping。 问题是,来自一个集群(VPC)的Kubernetes吊舱不能通过其内部IP ping另一个集群中的吊舱。我看到流量离开吊舱和仆

  • 我有一个后端nodeJS应用程序运行在kubernetes集群。现在我想运行两个cron作业计划每个月。cron作业在一个JS文件中。如何使用库伯内特斯创建一个作业,在每个月运行该服务的pod中运行这些JS文件? 此链接提供了对其工作原理的基本理解,但我对如何为特定服务和特定Pod运行它有点困惑 https://kubernetes.io/docs/concepts/workloads/contr

  • 我已经使用mongo k8s sidecar在kubernetes上提供了一个3成员副本集mongo集群。我需要在外部公开mongodb服务,因此创建了一个LoadBalancer。 这就是服务的样子 尝试使用mongodb shell 3.6进行连接,效果很好 但是在java客户端代码中,我看到了下面的异常。< code > Java . net . unknown hostexception: