Skip to content

Commit

Permalink
issue 13383
Browse files Browse the repository at this point in the history
  • Loading branch information
SatoruItaya committed Apr 8, 2019
1 parent 0ee892d commit 969e7f3
Showing 1 changed file with 141 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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 %}}

0 comments on commit 969e7f3

Please sign in to comment.