web-dev-qa-db-ja.com

Kubernetesポッド内からcurlコマンドを実行する方法

次の質問があります:-

1:次のコマンドを使用してKubernetesポッドにログインしています:

./cluster/kubectl.sh exec my-nginx-0onux -c my-nginx -it bash

「ip addr show」

コマンドは、ポッドの割り当てられたIPを表示します。ポッドは論理的な概念であるため、ポッドではなくドッカーコンテナーにログインしていると想定しています。この場合、ポッドIPはドッカーコンテナーIPと同じです。その理解は正しいですか?

2:Kubernetesノードから、Sudo docker psそして、次のことを行います。

Sudo docker exec  71721cb14283 -it '/bin/bash'

これは機能しません。誰かが私が間違っていることを知っていますか?

3:curlを使用してポッド内から作成したnginxサービスにアクセスしたい。このポッドまたはコンテナ内にcurlをインストールして、内部からサービスにアクセスするにはどうすればよいですか。ネットワーク接続を理解するためにこれを行いたいです。

14
Mayank

Kubernetesネットワーク内でcurlコマンドラインを取得して、内部のREST=エンドポイントをテストおよび探索する方法を次に示します。

ネットワーク内で実行中のbusyboxのプロンプトを取得するには、次のコマンドを実行します。 (ヒントは、開発者ごとに1つの一意のコンテナを使用することです。)

kubectl run curl-<YOUR NAME> --image=radial/busyboxplus:curl -i --tty --rm

--rmを省略して、後で再利用するためにインスタンスを実行し続けることができます。後で再利用するには、次を入力します。

kubectl attach <POD ID> -c curl-<YOUR NAME> -i -t

コマンドkubectl get podsを使用すると、実行中のすべてのPODを表示できます。これはcurl-yourname-944940652-fvj28に似たものです。

編集:これを行う前に、端末から(一度)Googleクラウドにログインする必要があることに注意してください!次に例を示します。必ずゾーン、クラスター、プロジェクトに配置してください:gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

27

Kubernetesの考え方は、podsHostしかし、確実または永続的なものは何もないため、コンテナまたはポッドのIPをコンテナからルックアップするのではなく、KubernetesがService

KubernetesServiceは、kube-proxyを介してセレクターの定義されたセットを持つポッドへのパスです。指定されたセレクターを持つポッド。

要するに:

Podを作成し、たとえば「name」と呼ばれるlabelを使用します。 name=mypodを作成してみましょう。Serviceselectorname=mypodを作成しますたとえば、ポート9000を割り当てるmyServiceを呼び出します。

curl http://myService:9000を使用して、ポッドからこのサービスが提供するポッドにカールできます

これは、もちろんDNSポッドを実行していることを前提としています。作成時にLoadBalancerタイプのServiceを要求し、AWSまたはGKEで実行すると、このサービスも利用可能になりますクラスターの外部から。内部専用サービスの場合は、フラグclusterIP: Noneを設定するだけで、外部で負荷分散されません。

こちらのリファレンスをご覧ください:

https://kubernetes.io/docs/concepts/services-networking/service/https://kubernetes.io/docs/tutorials/services/

4
MrE
  1. Kubernetesは IP-per-pod モデルを使用します。同じポッド内のすべてのコンテナは、同じホストで実行されているかのように同じIPアドレスを共有します。

  2. コマンドはdocker exec [OPTIONS] CONTAINER COMMAND [ARG...]に従う必要があります。あなたの場合、Sudo docker exec -it 71721cb14283 '/bin/bash'は機能するはずです。そうでない場合は、コマンドの出力を提供する必要があります。

  3. 使用する画像によって異なります。コンテナにソフトウェアをインストールすることに関して特別なことはありません。 nginxの場合は、apt-get update && apt-get install curlを試してください

3
Yu-Ju Hong