このページでは、Kubernetesクラスター内で実行されているサービスに接続する方法を説明します。
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください: kubectl version.
Kubernetesでノード、Pod、そしてServiceは、それぞれの独自のIPアドレスを持ちます。 多くの場合、クラスター内のノードIP、Pod IP、そして一部のService IPはルーティングされないため、デスクトップマシンなどのクラスター外のマシンからは到達できません。
クラスター外からノード、PodそしてServiceに接続するためには、いくつかのオプションがあります。
NodePortまたはLoadBalancerタイプのServiceを使用します。
詳細はServiceおよびkubectl exposeのドキュメントを参照してください。通常、kube-systemによってクラスター内で起動されるServiceがいくつか存在します。
これらは、kubectl cluster-infoコマンドを通して一覧表示ができます。
kubectl cluster-info
出力は次のとおりです。
Kubernetes master is running at https://192.0.2.1
elasticsearch-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
kibana-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kibana-logging/proxy
kube-dns is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kube-dns/proxy
grafana is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
heapster is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
これは、各Serviceにアクセスするためのproxy-verb URLを示しています。
たとえば、このクラスターでは(Elasticsearchを使用した)クラスター単位のログ収集が有効で、適切な認証情報を渡すことで、https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/からアクセスできます。
または、たとえば次のようにkubectl proxyを介してhttp://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/からアクセスすることも可能です。
前述のとおり、ServiceのプロキシURLを取得するにはkubectl cluster-infoコマンドを使用します。
Serviceのエンドポイント、サフィックス、パラメータを含むプロキシURLを作成するには、次の形式でServiceのプロキシURLに追記します。
http://kubernetes_master_address/api/v1/namespaces/namespace_name/services/[https:]service_name[:port_name]/proxy
ポートに名前を指定していない場合、URLにport_nameを指定する必要はありません。 また、名前付きポート、名前なしポートのいずれの場合でも、port_nameの代わりにポート番号を使用することもできます。
デフォルトでは、APIサーバーはHTTPを使用してServiceにプロキシします。
HTTPSを使用する場合は、Service名の前にhttps:を付与します。
http://<kubernetes_master_address>/api/v1/namespaces/<namespace_name>/services/<service_name>/proxy
URLの<service_name>部分では、次の形式がサポートされています。
<service_name> - HTTPを使用して、デフォルトまたは名前なしのポートにプロキシします<service_name>:<port_name> - HTTPを使用して、指定したポート名またはポート番号にプロキシしますhttps:<service_name>: - httpsを使用して、デフォルトまたは名前なしのポートにプロキシします(末尾のコロンに注意してください)https:<service_name>:<port_name> - httpsを使用して、指定したポート名またはポート番号にプロキシしますElasticsearchサービスのエンドポイント_search?q=user:kimchyにアクセスするには、次のURLを使用します。
http://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
Elasticsearchクラスターのヘルス情報_cluster/health?pretty=trueにアクセスするには、次のURLを使用します。
https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
ヘルス情報は次のような内容です。
{
"cluster_name" : "kubernetes_logging",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 5,
"active_shards" : 5,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 5
}
httpsを経由してElasticsearchサービスのヘルス情報_cluster/health?pretty=trueにアクセスするには、次のURLを使用します。
https://192.0.2.1/api/v1/namespaces/kube-system/services/https:elasticsearch-logging:/proxy/_cluster/health?pretty=true
ブラウザのアドレスバーにAPIサーバーのプロキシURLを直接入力してアクセスできる場合があります。ただし、以下の点に注意してください。