SSH是一种基于UNIX
的协议,用于访问远程机器或虚拟机 (VM)
根据定义,Pod类似于 VM,因为它允许容器表现得好像它们在隔离的 VM 上运行一样。如果你在集群内——最简单的方法是使用 kubectl exec 命令
但是,是否可以从集群外部通过 SSH 连接到 K8 Pod?
如何可靠地访问 K8 Pod?
根据定义,Pod 本质上是短暂的,服务是一组 Pod 的稳定抽象点。因此,可以通过服务可靠地访问 K8 Pod
从 Kubernetes 集群外部访问 pod 的合适服务类型是什么?
ClusterIP、NodePort
和LoadBalancer
是三种可能的服务类型
但是,ClusterIP
永远无法从集群外部访问该服务,因此,它不是一种选择
该NodePort
服务提供了一个集群范围的端口,可以通过集群节点访问。但考虑到节点本质上也是短暂的,NodePort
它不是一种稳定的访问 Pod
的方式
LoadBalancer服务是唯一适合从 Kubernetes 集群外部访问 Pod
的服务类型,因为该服务类型提供了一个外部 IP 地址,可以绑定到公共负载均衡器,如 Google 的 HTTPS 负载均衡器
下面是LoadBalancer
打开 SSH 端口进行通信的服务片段
namespace: default
labels:
app: my-example
spec:
type: LoadBalancer
ports:
# If there are multiple ports, then each port sub-section needs a name and a protocol (as needed)
- port: 8080
targetPort: 8080
name: http
- port: 22
targetPort: 22
name: ssh
protocol: TCP
selector:
app: my-example
如何启用 Pod 作为 SSH 服务器?
为了通过 SSH 连接到 Pod,Pod 应该安装SSH 服务器。这可以通过安装OpenSSH Server作为绑定到 Pod 的 Docker 镜像的一部分来提供
以下命令应包含在与绑定到 Pod 的容器关联的 Dockerfile 中。
因此,即使 Pod 是短暂的,但openssh-server
每次重新创建Pod并使用默认用户配置 SSH 时,Pod 都会具有功能
apt-get update
apt-get -y install openssh-server
useradd testuser
passwd testuser
service ssh restart
我们如何从 Kubernetes 集群外部通过 SSH 连接到 K8 Pod?
鉴于 Pod 可以通过服务访问,并且可以通过LoadBalancer公共负载均衡器服务的服务访问;用户可以通过执行如下经典ssh命令从 Kubernetes 集群外部通过 SSH 连接到 K8 Pod
ssh -f testuser@{ip}
替代方法 — SSH 密钥而不是用户凭据
如果需要使用 SSH 密钥作为身份验证机制,则可以将客户端的公共 SSH 密钥作为机密挂载到 Pod。
这将确保客户端的公钥在 Pod 中可用作授权密钥,随后,客户端可以通过使用客户端的私钥对 Pod 上的授权密钥进行身份验证来进行连接
发表评论 取消回复