issue 13383

pull/13701/head
SatoruItaya 2019-04-09 08:51:24 +09:00
parent 0ee892d4ad
commit 969e7f3f5c
1 changed files with 141 additions and 0 deletions

View File

@ -0,0 +1,141 @@
---
title: Serviceを利用したクラスター内のアプリケーションへのアクセス
content_template: templates/tutorial
weight: 60
---
{{% capture overview %}}
ここでは、クラスター内で稼働しているアプリケーションに外部からアクセスするために、KubernetesのServiceオブジェクトを作成する方法を紹介します。
例として、2つのインスタンスから成るアプリケーションへのロードバランシングを扱います。
{{% /capture %}}
{{% capture prerequisites %}}
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
{{% /capture %}}
{{% capture objectives %}}
* 2つのHellow Worldアプリケーションを稼働させる。
* Nodeのポートを公開するServiceオブジェクトを作成する。
* 稼働しているアプリケーションにアクセスするためにServiceオブジェクトを使用する。
{{% /capture %}}
{{% capture lessoncontent %}}
## 2つのPodから成るアプリケーションのServiceを作成
1. クラスタでHello Worldアプリケーションを稼働させます:
```shell
kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
```
このコマンドは
[Deployment](/docs/concepts/workloads/controllers/deployment/)
オブジェクトとそれに紐付く
[ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)
オブジェクトを作成します。ReplicaSetは、Hello Worldアプリケーションが稼働している2つの
[Pod](/docs/concepts/workloads/pods/pod/)
から構成されます。
1. Deploymentの情報を表示します:
```shell
kubectl get deployments hello-world
kubectl describe deployments hello-world
```
1. ReplicaSetオブジェクトの情報を表示します:
```shell
kubectl get replicasets
kubectl describe replicasets
```
1. Deploymentを公開するServiceオブジェクトを作成します:
```shell
kubectl expose deployment hello-world --type=NodePort --name=example-service
```
1. Serviceに関する情報を表示します:
```shell
kubectl describe services example-service
```
出力例は以下の通りです:
```shell
Name: example-service
Namespace: default
Labels: run=load-balancer-example
Annotations: <none>
Selector: run=load-balancer-example
Type: NodePort
IP: 10.32.0.16
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31496/TCP
Endpoints: 10.200.1.4:8080,10.200.2.5:8080
Session Affinity: None
Events: <none>
```
NodePortの値を記録しておきます。上記の例では、31496です。
1. Hello Worldアプリーションが稼働しているPodを表示します:
```shell
kubectl get pods --selector="run=load-balancer-example" --output=wide
```
出力例は以下の通りです:
```shell
NAME READY STATUS ... IP NODE
hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1
hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2
```
1. Hello World podが稼働するNodeのうち、いずれか1つのパブリックIPアドレスを確認します。
確認方法は、使用している環境により異なります。
例として、Minikubeの場合は`kubectl cluster-info`、Google Compute Engineの場合は`gcloud compute instances list`によって確認できます。
1. 選択したード上で、NodePortの値でのTCP通信を許可するファイヤーウォールを作成します。
NodePortの値が31568の場合、31568番のポートを利用したTCP通信を許可するファイヤーウォールを作成します。
クラウドプロバイダーによって設定方法が異なります。
1. Hello World applicationにアクセスするために、Nodeのアドレスとポート番号を使用します:
```shell
curl http://<public-node-ip>:<node-port>
```
ここで `<public-node-ip>` はNodeのパブリックIPアドレス、
`<node-port>` はNodePort Serviceのポート番号の値を表しています。
リクエストが成功すると、下記のメッセージが表示されます:
```shell
Hello Kubernetes!
```
## service configuration fileの利用
`kubectl expose`コマンドの代わりに、
[service configuration file](/docs/concepts/services-networking/service/)
を使用してServiceを作成することもできます。
{{% /capture %}}
{{% capture cleanup %}}
Serviceを削除するには、以下のコマンドを実行します:
kubectl delete services example-service
Hello Worldアプリケーションが稼働しているDeployment、ReplicaSet、Podを削除するには、以下のコマンドを実行します:
kubectl delete deployment hello-world
{{% /capture %}}
{{% capture whatsnext %}}
次は
[こちら](/docs/concepts/services-networking/connect-applications-service/).
{{% /capture %}}