connection refused
在 Amazon Linux 2 实例上,每次运行引用文件路径的命令时,命令行都会引发以下错误。当使用https
url 代替文件路径时,也会引发相同的错误。
为什么会发生这种情况,如何解决这个问题,以便可以从命令行读取和使用文件?
这是控制台输出:
[kubernetes-host@ip-of-ec2-instance ~]$ sudo kubectl apply -f rbac-kdd.yaml | tee kubeadm-rbac-kdd.out
unable to recognize "rbac-kdd.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "rbac-kdd.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
[kubernetes-host@ip-of-ec2-instance ~]$
文件的相对路径是正确的。该命令正在尝试将 calico 应用于由 创建的 Kubernetes 集群kubeadm
,如果有帮助的话。 但我认为这是一个基本的 linux 问题。
SELinux 已在此 Amazon Linux 2 EC2 实例上禁用。
在我尝试确定可能的原因时,希望能得到一些指示。
问题隔离:
另外,.kube/config
指示端口的内容6443
如下:
[kubernetes-host@ip-of-ec2-instance ~]$ cat /home/kubernetes-host/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <encrypted-certificate-authority-data-here>
server: https://ip-of-ec2-instance:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: <encrypted-client-certificate-data-here>
client-key-data: <encrypted-client-key-data-here>
[kubernetes-host@ip-of-ec2-instance ~]$
问题似乎是kubectl apply
命令正在使用 port8080
而 Kubernetes apiserver 正在使用 port 6443
。如何纠正这种不匹配以使kubectl apply
命令使用 port 6443
?
进一步,kubectl
能够看到6443
是正确的端口,并且curl
可以到达正确的6443
端口,如下:
[kubernetes-host@ip-of-ec2-instance ~]$ kubectl cluster-info
Kubernetes master is running at https://ip-of-ec2-instance:6443
KubeDNS is running at https://ip-of-ec2-instance:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[kubernetes-host@ip-of-ec2-instance ~]$ curl https://ip-of-ec2-instance:6443
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
[kubernetes-host@ip-of-ec2-instance ~]$
[kubernetes-host@ip-of-ec2-instance ~]$ curl https://127.0.0.1:6443
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
[kubernetes-host@ip-of-ec2-instance ~]$
为什么kubectl apply
不能映射到端口6443
,什么时候kubectl cluster-info
能够映射到正确的端口?
这看起来您无法连接到 Kubernetes API 服务器。这可能有很多原因
systemctl status
ordocker ps
)。ss -ln
并检查在 127.0.0.1:8080 或 *:8080 上监听的内容curl -k https://127.0.0.1:8080
以检查 https 或curl http://127.0.0.1:8080
HTTP。docker ps
或docker inspect
查看端口转发。iptables -S
这是一个长镜头,你不会经常看到规则阻止数据包进入本地主机。编辑
在查看更多故障排除数据后。我注意到您
kubectl
以 root 身份运行。您的 kubeconfig 位于用户目录中。您应该以用户“kubernetes-host”的身份运行 kubectl,只需sudo
在命令开头删除 即可。kubeconfig 文件会将 Kubectl 引导到正确的端点(地址和端口),但以 root 身份运行,kubectl 不会检查 /home/kubernetes-host/.kube/config。所以试试
kubectl apply -f rbac-kdd.yaml
如果由于某种原因必须以 root 身份运行,您应该:
1) 质疑导致你来到这里的生活选择。
2) 运行
sudo kubectl apply --kubeconfig=/home/kubernetes-host/.kube/config -f rbac-kdd.yaml
以显式使用 kubernetes-host 用户主目录中的配置。