ファイルが認識されません。接続が拒否されました。

ファイルが認識されません。接続が拒否されました。

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を確認してください(やはり言えますが、これは一般的に誤って設定することができないため、可能性が低いです)。

編集する

より多くのトラブルシューティングデータを見た後。私はあなたがkubectlrootとして実行されていることがわかりました。 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.yamlkubernetes-host ユーザーホームディレクトリの構成を明示的に使用するには、実行します。

おすすめ記事