登录
首页 >  Golang >  Go问答

使用 Go 从Kubernetes连接到Windows网络驱动器

来源:stackoverflow

时间:2024-03-25 09:54:43 141浏览 收藏

为了从 Alpine Linux 中托管的 Go API 连接到 Windows 远程网络驱动器,必须确保满足以下先决条件: * 安装并运行 Samba 客户端 * 解析目标名称 * 排除连接问题(路由、防火墙规则) * 授予共享访问权限 * 允许容器挂载远程卷

问题内容

我需要从 alpine linux 中托管的 GO API 连接到 Windows 远程服务器(共享驱动器)。我尝试使用 tcp、ssh 和 ftp,但没有一个不起作用。有什么建议或想法来解决这个问题吗?


解决方案


在继续调试 go 代码之前,需要在容器内进行一些“非熟练劳动”,以确保满足先决条件:

  1. samba 客户端已安装并且守护进程正在运行;
  2. 目标名称得到解析;
  3. 不存在连接问题(路由、防火墙规则等);
  4. 有共享访问权限;
  5. 容器允许挂载远程卷。

连接到容器:

$ docker ps 
$ docker exec -it container_id /bin/bash

samba 守护进程正在运行:

$ smbd status
$ nmbd status

您在代码和命令行中使用正确的名称格式:

unc notation =>  \\server_name\share_name
url notation =>  smb://server_name/share_name

目标名称可解析

$ nslookup server_name.domain_name
$ nmblookup netbios_name 
$ ping server_name

samba 共享可见

$ smbclient -l //server [-u user]       # list of shares

并且可访问(lsgetput 命令在此处提供预期输出)

$ smbclient //server/share
> ls

尝试按照@cwadley的建议挂载远程共享(docker容器中默认情况下可能禁止挂载):

$ sudo mount -t cifs -o username=geeko,password=pass //server/share /mnt/smbshare

出于调查目的,您可以使用 GitHub 上提供的 samba docker 容器,甚至可以在其中部署您的应用程序,因为它包含 samba 客户端和有用的命令行工具:

$ sudo docker run -it -p 139:139 -p 445:445 -d dperson/samba

在 docker 级别上实现此操作后,您可以轻松地在 kubernetes 中重现此操作。

您可以在 kubernetes 中正在运行的 pod 中进行检查:

$ kubectl get deployments --show-labels
$ LABEL=label_value; kubectl get pods -l app=$LABEL -o custom-columns=POD:metadata.name,CONTAINER:spec.containers[*].name
$ kubectl exec pod_name -c container_name -- ping -c1 server_name

在 docker 和 kubernetes 中的命令行中使其正常工作后,您的程序代码也应该可以正常工作。

此外,stackoverflow 上有一个关于 samba 主题的非常深思熟虑的讨论:
Mount SMB/CIFS share within a Docker container

以上就是《使用 Go 从Kubernetes连接到Windows网络驱动器》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>