website/content/ja/docs/tasks/access-application-cluster/service-access-application-...

146 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Serviceを利用したクラスター内のアプリケーションへのアクセス
content_type: tutorial
weight: 60
---
<!-- overview -->
ここでは、クラスター内で稼働しているアプリケーションに外部からアクセスするために、KubernetesのServiceオブジェクトを作成する方法を紹介します。
例として、2つのインスタンスから成るアプリケーションへのロードバランシングを扱います。
## {{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
## {{% heading "objectives" %}}
* 2つのHello Worldアプリケーションを稼働させる。
* Nodeのポートを公開するServiceオブジェクトを作成する。
* 稼働しているアプリケーションにアクセスするためにServiceオブジェクトを使用する。
<!-- lessoncontent -->
## 2つのPodから成るアプリケーションのServiceを作成
アプリケーションDeploymentの設定ファイルは以下の通りです:
{{< codenew file="service/access/hello-application.yaml" >}}
1. クラスターでHello Worldアプリケーションを稼働させます:
上記のファイルを使用し、アプリケーションのDeploymentを作成します:
```shell
kubectl apply -f https://k8s.io/examples/service/access/hello-application.yaml
```
このコマンドは{{< glossary_tooltip text="Deployment" term_id="deployment" >}}オブジェクトとそれに紐付く{{< glossary_tooltip term_id="replica-set" text="ReplicaSet" >}}オブジェクトを作成します。ReplicaSetは、Hello Worldアプリケーションが稼働している2つの{{< glossary_tooltip text="Pod" term_id="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](/ja/docs/concepts/services-networking/service/)
を使用してServiceを作成することもできます。
## {{% heading "cleanup" %}}
Serviceを削除するには、以下のコマンドを実行します:
kubectl delete services example-service
Hello Worldアプリケーションが稼働しているDeployment、ReplicaSet、Podを削除するには、以下のコマンドを実行します:
kubectl delete deployment hello-world
## {{% heading "whatsnext" %}}
詳細は
[serviceを利用してアプリケーションと接続する](/ja/docs/concepts/services-networking/connect-applications-service/)
を確認してください。