解决公网下,k8s calico master节点无法访问node节点创建的pod

本文讲述了如何在Kubernetes集群中解决部署后只能在node节点访问,master节点无法访问的问题,通过配置公网IP、创建虚拟网卡及调整calico网络设置来实现跨节点访问。

目的:解决pod部署成功后,只能在node节点访问,而master节点无法访问

原因:集群搭建时,没有配置公网进行kubectl操作,从而导致系统默认node节点,使用内网IP加入k8s集群!如下:

解决方案:围绕公网IP进行搭建即可,其实就是在传统的搭建步骤下,给master节点和node节点添加下公网网卡就可以了


1、机器IP清单

  • 我的两台服务器的都是云服务器
  • 我的master节点IP为111.230开头的
  • 我只有一个node节点,IP为192.168.9.96(该IP与calico网段冲突)

2、重置master节点的kubeadm

kubeadm reset

3、在master节点上创建公网的虚拟网卡

  • 看一下你的公网IP是否在机器中存在
ip a | grep 你的公网IP
  • 如果没有就执行下面这段代码新增一个和公网IP一样的虚拟网卡IP 
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
BOOTPROTO=static
DEVICE=eth0:1
IPADDR=111.230.19.178  #这里是你的公网IP
PREFIX=32
TYPE=Ethernet
USERCTL=no
ONBOOT=yes
EOF
  • 重置网络

                
<think> 根据用户的问题,用户想要了解如何从Kubernetes工作节点登录到主节点。这是一个关于Kubernetes节点间通信的操作问题。 在Kubernetes集群中,工作节点(Worker Node)和主节点Master Node)通常位于同一个网络内,但出于安全考虑,直接登录主节点可能不是默认配置。以下是几种常见的登录方法: 1. **通过SSH登录**:如果工作节点和主节点之间网络互通,并且主节点开启了SSH服务,那么可以从工作节点使用SSH命令登录到主节点。这需要事先在主节点上配置好SSH访问权限(例如,将工作节点的公钥添加到主节点的授权密钥中)。 2. **通过Kubernetes API Server代理**:如果用户希望执行Kubernetes管理操作,可以通过kubectl proxy或者直接访问API Server的地址(通常主节点上运行着API Server)。但是,这并不等同于登录到主节点的操作系统。 3. **通过跳板机或堡垒机**:在生产环境中,通常不会允许直接从工作节点登录主节点,而是通过一个安全的跳板机进行访问。 由于Kubernetes本身并不提供节点间直接登录的功能,这依赖于集群网络配置和节点访问控制。 根据引用[2]中提到,工作节点在加入集群时需要配置Master节点的URL,这说明工作节点需要能够访问Master节点的API Server(通常是6443端口),但这并不包括SSH登录。 因此,重点介绍SSH登录的方法: 步骤: 1. 确保主节点已开启SSH服务(默认端口22)。 2. 在工作节点上生成SSH密钥对(如果还没有的话): ```bash ssh-keygen -t rsa ``` 3. 将工作节点的公钥(通常是`~/.ssh/id_rsa.pub`)复制到主节点的`~/.ssh/authorized_keys`文件中。可以使用`ssh-copy-id`命令: ```bash ssh-copy-id user@master-node-ip ``` 如果无法使用`ssh-copy-id`,也可以手动复制。 4. 从工作节点使用SSH登录主节点: ```bash ssh user@master-node-ip ``` 注意: - 主节点的IP地址或主机名必须可以从工作节点访问。 - 用户需要知道主节点上的一个有效用户名和密码(或者使用密钥认证,如上述步骤)。 - 生产环境中,建议使用非root用户,并且使用sudo权限。 另,引用[3]中提到了修改主节点名称,说明用户可能对节点配置有操作权限,所以SSH登录是可行的。 如果集群是在公有云(如阿里云)上,可能还需要配置安全组规则,允许工作节点的IP访问节点的22端口。 引用[4]中提到了一键部署单节点Kubernetes(使用k3s),这种情况下主节点和工作节点可能是同一台机器,那么登录主节点其实就是本地登录。但用户明确提到了工作节点登录主节点,所以这里不考虑单节点情况。 因此,最通用的方法就是SSH。 但是,需要提醒用户:直接登录主节点通常不是日常操作,除非进行故障排查或系统维护。在Kubernetes集群中,应尽量通过kubectl命令来管理集群,而不是直接操作主节点。 如果用户无法通过SSH登录(比如没有公网IP的节点),可以考虑使用KubernetesPod作为跳板。例如,在主节点上运行一个Pod(具有hostNetwork权限),然后通过kubectl exec进入该Pod,再通过该Pod登录主节点。但这通常更复杂,而且需要主节点上已经存在可用的Pod。 所以,推荐的方法是SSH。 下面整理回答。 </think>要从 Kubernetes 工作节点安全登录到主节点,主要有以下几种方法(根据您的集群配置和网络环境选择): ### 方法 1:通过 SSH 直接连接(需网络互通) ```bash # 在工作节点执行 ssh <用户名>@<主节点IP或主机名> # 示例(假设主节点IP为192.168.1.100) ssh kuberadmin@192.168.1.100 ``` **前提条件**: 1. 工作节点与主节点**网络互通**(同VPC/配置路由) 2. 主节点已开启 SSH 服务(默认端口22) 3. 当前用户拥有主节点的 SSH 密钥或密码权限 4. 安全组/防火墙放行 SSH 流量(云环境需配置)[^2] --- ### 方法 2:通过 Kubectl Proxy(无需直接网络访问) ```bash # 1. 在工作节点配置kubectl访问权限(需提前拷贝admin.conf) mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 2. 建立API Server代理隧道 kubectl proxy --port=8080 & # 3. 通过代理访问节点(需主节点有SSH服务) ssh -o ProxyCommand="nc -X connect -x 127.0.0.1:8080 %h %p" kuberadmin@<主节点主机名> ``` **适用场景**:工作节点无法直连主节点但能访问 API Server[^2] --- ### 方法 3:使用 Jump Pod 跳板(最安全) ```yaml # 创建跳板Pod(在主节点运行) apiVersion: v1 kind: Pod metadata: name: jump-pod namespace: default spec: nodeName: <主节点名称> # 指定调度到主节点 hostNetwork: true # 共享主机网络 containers: - name: jump-container image: alpine:3.14 command: ["tail", "-f", "/dev/null"] ``` **操作步骤**: 1. 应用YAML:`kubectl apply -f jump-pod.yaml` 2. 进入跳板Pod:`kubectl exec -it jump-pod -- sh` 3. 在Pod内通过`localhost`访问节点服务 --- ### 方法 4:使用 Kubernetes Service Account(自动化场景) ```bash # 创建具有节点访问权限的ServiceAccount kubectl create serviceaccount node-access # 绑定权限 kubectl create clusterrolebinding node-access \ --clusterrole=system:node \ --serviceaccount=default:node-access # 获取临时Token(用于API调用) kubectl create token node-access ``` **用途**:通过 Kubernetes API 执行 `kubectl debug` 或访问节点指标[^3] --- ### 安全建议 1. **最小权限原则** ```bash # 创建专用登录用户(非root) sudo useradd -m -s /bin/bash kubeadmin sudo passwd kubeadmin ``` 2. **密钥认证替代密码** ```bash # 工作节点生成密钥对 ssh-keygen -t ed25519 ssh-copy-id kubeadmin@<master-ip> ``` 3. **审计日志** 在主节点启用 SSH 日志记录: ```bash # /etc/ssh/sshd_config LogLevel VERBOSE ``` 4. **网络隔离** 通过 Calico/Weave 等 CNI 插件配置网络策略,限制 SSH 访问源 IP[^1] > **故障排查**:若连接失败,检查: > 1. 主节点 SSH 服务状态:`systemctl status sshd` > 2. 防火墙规则:`sudo iptables -L -n -v` > 3. 节点网络连通性:`ping <master-ip>` > 4. kubelet 注册状态:`kubectl get nodes`[^2] ---
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值