K8S执行完毕kubectl init xxx 执行 kubectl get ns 报错才connect: connection refused

文章讲述了在安装并配置完Kubernetes(K8S)后,遇到`kubectlgetns`报错的问题,主要原因是APIServer未启动且kubelet遇到imagepull失败。提供了两种解决方案:一是修改`/etc/containerd/config.toml`中的registry设置,二是直接从阿里云镜像仓库拉取并重命名镜像tag。

问题场景:

在安装完毕K8S之后,执行 kubectl get ns 报错:

[root@master ~]# kubectl get pods
E0501 08:34:55.770030   11268 memcache.go:265] couldn't get current server API group list: Get "https://192.168.1.100:6443/api?timeout=32s": dial tcp 192.168.1.100:6443: connect: connection refused
E0501 08:34:55.770441   11268 memcache.go:265] couldn't get current server API group list: Get "https://192.168.1.100:6443/api?timeout=32s": dial tcp 192.168.1.100:6443: connect: connection refused
E0501 08:34:55.771934   11268 memcache.go:265] couldn't get current server API group list: Get "https://192.168.1.100:6443/api?timeout=32s": dial tcp 192.168.1.100:6443: connect: connection refused
E0501 08:34:55.773435   11268 memcache.go:265] couldn't get current server API group list: Get "https://192.168.1.100:6443/api?timeout=32s": dial tcp 192.168.1.100:6443: connect: connection refused
E0501 08:34:55.774822   11268 memcache.go:265] couldn't get current server API group list: Get "https://192.168.1.100:6443/api?timeout=32s": dial tcp 192.168.1.100:6443: connect: connection refused

这应该是 API Server 没有启动,再看看K8S系统错误日志:

[root@master ~]# journalctl -f -u kubelet
... 其他信息
5月 01 08:34:42 master kubelet[972]: E0501 08:34:42.560018     972 pod_workers.go:1300] "Error syncing pod, skipping" err="failed to \"CreatePodSandbox\" for \"kube-scheduler-master_kube-system(4302dec0d7a2b0f4438374ffc19ef0be)\" with CreatePodSandboxError: \"Failed to create sandbox for pod \\\"kube-scheduler-master_kube-system(4302dec0d7a2b0f4438374ffc19ef0be)\\\": rpc error: code = Unknown desc = failed to get sandbox image \\\"registry.k8s.io/pause:3.6\\\": failed to pull image \\\"registry.k8s.io/pause:3.6\\\": failed to pull and unpack image \\\"registry.k8s.io/pause:3.6\\\": failed to resolve reference \\\"registry.k8s.io/pause:3.6\\\": failed to do request: Head \\\"https://asia-east1-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.6\\\": dial tcp 142.251.8.82:443: i/o timeout\"" pod="kube-system/kube-scheduler-master" podUID="4302dec0d7a2b0f4438374ffc19ef0be"
... 其他信息

过滤乱七八糟的错误日志,基本都在说无法使用connect: connection refused,但中间的错误可以看大是一个docke image pull不下来,肯定是在外网,所以我们可以使用阿里云镜像拿下来编辑一下名称。

解决办法01:

  1. 修改 /etc/containerd/config.toml配置文件,执行命令如下所示:
sed -i 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g' /etc/containerd/config.toml 

image.png

  1. 重启containerd
[root@master ~]# systemctl restart containerd

但我这个config.toml没有源设置的地方懒得找了,直接使用上面分析的方法pull在改tag

解决办法02:

[root@master ~]# ctr -n k8s.io images pull -k registry.aliyuncs.com/google_containers/pause:3.6
[root@master ~]# ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6
# 重命名镜像registry.aliyuncs.com/google_containers/pause:3.6的tag为registry.k8s.io/pause:3.6
[root@master ~]# systemctl restart containerd

我就是这个办法解决的。

### 解决 DocumentBuilderFactory 连接被拒绝的错误 当遇到 `Connection refused: connect` 的错误时,通常表明客户端无法成功建立到服务器的网络连接。以下是可能的原因以及对应的解决方案: #### 1. **检查网络配置** 如果目标服务运行在特定端口上,则需要验证该端口是否开放并可访问。可以通过命令行工具(如 telnet 或 netstat)测试端口连通性[^2]。 #### 2. **确认 JAR 包兼容性** 确保项目中使用的依赖库版本匹配实际需求。例如,在使用 MySQL 数据库时,可能会因为 JDBC 驱动程序版本不一致而导致类似的异常。可以尝试更新或替换相关的驱动程序 JAR 文件[^1]。 #### 3. **设置正确的协议与主机地址** 对于 Web Service 调用场景下发生的此类问题,需特别注意请求中的 URL 是否指定恰当的通信协议 (HTTP vs HTTPS),以及相应的端口号是否正确无误。一旦发现两者之间存在冲突情况——比如试图通过 HTTP 协议去访问仅支持 SSL 加密传输的服务实例——就极有可能触发上述提到的那种 “connection refused” 类型报错信息。因此建议开发者们务必仔细核对自己所构建出来的每一个对外接口调用表达式里头涉及到底层物理链路层面的各项参数设定值准确性。 #### 4. **处理实体流缓冲区管理** 有时为了提高性能或者防止资源泄漏等问题发生,在操作基于 HTTP 协议的数据交换过程中需要用到一些额外的技术手段来进行优化改进工作。例如下面这段代码展示了如何利用 Apache HttpClient 库创建一个新的带缓存功能的对象副本从而达到这个目的[^3]: ```java CloseableHttpResponse response = ...; HttpEntity entity = response.getEntity(); if (entity != null){ entity = new BufferedHttpEntity(entity); } ``` #### 5. **配置代理路由规划器** 另外一种常见的情形就是应用程序本身并没有直接暴露给外部世界而是经过了一定形式中间件转发之后再呈现出来的情况之下也可能出现这种现象。此时则应该考虑调整一下内部实现逻辑以便能够动态适应不同的部署环境变化所带来的影响因素差异之处。比如说这里给出的一个例子说明了怎样让我们的 Java 客户端自动识别操作系统级别的默认代理规则进而做出相应的行为改变动作[^4]: ```java SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner( ProxySelector.getDefault()); CloseableHttpClient httpclient = HttpClients.custom() .setRoutePlanner(routePlanner) .build(); ``` 综上所述,针对 `DocumentBuilderFactory Connection refused: connect` 错误的具体原因分析及其对应措施已经阐述完毕。希望以上内容可以帮助您有效定位并解决问题所在位置及根本成因方面提供一定的帮助和支持作用! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值