파일이 인식되지 않습니다. 연결이 거부되었습니다.

파일이 인식되지 않습니다. 연결이 거부되었습니다.

connection refusedAmazon Linux 2 인스턴스에서 파일 경로를 참조하는 명령을 실행할 때마다 명령줄에서 다음 오류가 발생합니다. 파일 경로 대신 URL을 사용 하면 https동일한 오류가 발생합니다 .

왜 이런 일이 발생합니까? 명령줄에서 파일을 읽고 사용할 수 있도록 이 문제를 어떻게 수정합니까?

콘솔 출력은 다음과 같습니다.

[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 ~]$

파일의 상대 경로가 정확합니다. 이 명령은 (도움이 되는 경우)에 의해 생성된 Kubernetes 클러스터에 calico를 적용하려고 합니다 kubeadm. 그러나 나는 이것이 기본적인 Linux 문제라고 생각합니다.

이 Amazon Linux 2 EC2 인스턴스에서는 SELinux가 비활성화되어 있습니다.

가능한 원인을 알아내려고 노력하는 동안 도움을 주시면 대단히 감사하겠습니다.


격리 문제:

.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 ~]$

문제는 Kubernetes apiserver가 port 를 사용하는 동안 kubectl apply명령이 port 를 사용하는 것 같습니다 . 명령이 port 를 사용 하도록 이 불일치를 수정하려면 어떻게 해야 합니까 ?80806443kubectl apply6443

또한 올바른 포트인지 kubectl확인할 수 있으며 다음과 같이 올바른 포트에 연결할 수 있습니다 .6443curl6443

[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올바른 포트에 매핑됩니까?

답변1

Kubernetes API 서버에 연결할 수 없는 것 같습니다. 여기에는 여러 가지 이유가 있을 수 있습니다.

  • Kubernetes API 서버가 실행되고 있지 않습니다.
  • API 서버가 TCP/8080을 수신하지 않습니다.
  • API 서버가 루프백 주소 127.0.0.1을 수신하지 않습니다.
  • API 서버가 HTTP를 사용하여 수신하고 있지 않습니다(HTTPS를 사용하여 수신하고 있습니다).
  • 로컬 방화벽(예: iptables)이 연결을 차단하고 있습니다.
  • TCPwrapper가 연결을 차단하고 있습니다.
  • SELinux와 같은 필수 액세스 제어 시스템이 연결을 차단하고 있는데 이것이 비활성화되었다고 말씀하셨습니다. Amazon Linux에 AppArmor가 설치되어 있는 경우 누군가 도움을 줄 수 있는지 모르겠습니다. :)
  • 이 연결이 발생하지 않는 더 난해한 이유를 목록에 추가할 수 있습니다.
일부 교정/문제 해결 단계
  • k8s API 서버가 실행 중인지 확인하세요(어떻게 설치했는지 모르기 때문에 확인 방법을 조언할 수 없습니다. 아마도 systemctl status또는 을 사용하는 것일 수도 있습니다 docker ps).
  • ss -ln127.0.0.1:8080 또는 *:8080에서 수신 대기 중인 내용을 실행 하고 확인하세요.
  • curl -k https://127.0.0.1:8080https 또는 HTTP를 확인하기 위해 다른 것을 사용하여 소켓에 연결할 수 있는지 확인하세요 curl http://127.0.0.1:8080.
  • API 서버가 Docker 컨테이너에서 실행 중인 경우 호스트 시스템의 8080에서 수신 대기하는지 확인하세요. docker ps아니면 docker inspect포트 포워딩을 살펴보세요.
  • 방화벽을 확인하십시오. iptables -S그럴 가능성은 거의 없습니다. 일반적으로 패킷이 localhost로 전송되는 것을 차단하는 규칙은 표시되지 않습니다.
  • 당신을 차단할 수 있는 것이 있는지 /etc/hosts.deny를 확인하십시오(다시 말하지만, 이것은 일반적으로 실수로 구성될 수 없기 때문에 가능성이 낮습니다).

편집하다

더 많은 문제 해결 데이터를 살펴본 후. 나는 당신이 kubectl루트로 실행되고 있음을 알았습니다. kubeconfig는 사용자 디렉터리에 있습니다. "kubernetes-host" 사용자로 kubectl을 실행해야 하며, sudo명령 시작 부분에서 이를 제거하기만 하면 됩니다. kubeconfig 파일은 Kubectl을 올바른 엔드포인트(주소 및 포트)로 지정하지만, 루트로 실행할 때 kubectl은 /home/kubernetes-host/.kube/config를 체크인하지 않습니다.

그러니 시도해 보세요kubectl apply -f rbac-kdd.yaml

어떤 이유로 루트로 실행해야 하는 경우 다음을 수행해야 합니다.

1) 당신을 여기로 이끈 삶의 선택에 대해 질문해 보세요.

2) sudo kubectl apply --kubeconfig=/home/kubernetes-host/.kube/config -f rbac-kdd.yamlkubernetes-host 사용자 홈 디렉터리의 구성을 명시적으로 사용하려면 실행합니다.

관련 정보