如何从 kubernetes pod 连接到本地网络

Posted

技术标签:

【中文标题】如何从 kubernetes pod 连接到本地网络【英文标题】:how to connect to local network from kubernetes pod 【发布时间】:2022-01-11 11:00:17 【问题描述】:

我在几个树莓派上建立了一个 k8s 集群,用于本地开发。我正在尝试使用在本地网络中运行的数据库,但是我似乎无法让 pod 连接到数据库。我尝试过使用服务和端点配置:

---
apiVersion: v1
kind: Service
metadata:
  name:  .Values.database.host 
  annotations:
    "helm.sh/hook-weight": "-2"
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-delete-policy": before-hook-creation
spec:
  clusterIP: None
  ports:
    - port:  .Values.database.port 
---
apiVersion: v1
kind: Endpoints
metadata:
  name:  .Values.database.host 
  annotations:
    "helm.sh/hook-weight": "-2"
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-delete-policy": before-hook-creation
subsets:
  - addresses:
      - ip:  .Values.database.ip 
    ports:
      - port:  .Values.database.port 
        name:  .Values.database.host 

我可以确认已创建端点和服务资源,并且所有连接细节都正确,但我的应用程序(在 k8s 集群上运行)仍然无法连接到主机网络上的数据库。仔细阅读documentation,听起来这些资源是用于从本地网络连接到集群,而不是相反?有没有办法从 k8s 资源连接到本地网络上的服务?

运行结果kubectl get pods -n kube-system

local-path-provisioner-5ff76fc89d-txj6k   1/1     Running   4          65d
metrics-server-86cbb8457f-r8q6w           1/1     Running   3          65d
coredns-7448499f4d-5646n                  1/1     Running   10         176d
csi-smb-node-9j5gm                        3/3     Running   3291       150d
csi-smb-controller-6c696945f8-8t6qj       3/3     Running   27         150d
csi-smb-controller-6c696945f8-ck5hh       3/3     Running   3361       150d
csi-smb-node-822bb                        3/3     Running   3260       150d
csi-smb-node-4nckf                        3/3     Running   3655       150d

【问题讨论】:

你的客户端是运行在集群网络还是宿主网络? 客户端在集群网络,db在主机网络 运行数据库的主机是工作节点之一,您可以从集群中的 pod ping 主机吗?还是主机不是集群的一部分? 数据库正在运行 k8s 节点的树莓派之一上运行。当我 ssh 进入它们时,我可以从任何树莓派访问数据库,所以我知道它们可以通过主机网络访问。我正在尝试弄清楚如何桥接 k8s 和主机网络,以便 k8s pod 可以调用在主机网络上运行的数据库。 是的,但没有选择作为解决方案的答案。我将添加我为解决问题所做的工作,但我认为该解决方案与原始问题无关。 【参考方案1】:

原来问题不是 kubernetes 问题,而是配置问题。我能够通过修改 postgres hba 配置文件以拥有更广泛的 IP 地址来解决我遇到的问题。正如@gohm'c 所提到的,网上有很多资源描述了如何解决我遇到的连接错误。感谢@gohm'c 在调试方面的帮助。

【讨论】:

以上是关于如何从 kubernetes pod 连接到本地网络的主要内容,如果未能解决你的问题,请参考以下文章

无法从 kubernetes pod 内部连接到外部数据库

.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod

如何在 kubernetes pod 中正确创建用于创建 SSH 隧道的 sidecar 容器

Kubernetes Python客户端:使用Autobahn websocket连接到pod /服务/使用bearer token连接

如何将文件从 kubernetes Pod 复制到本地系统

K8S集群内Pod如何与本地网络打通实现debug