Skip to content

Commit dfa5b6b

Browse files
committed
[ja] Translated /content/en/docs/tasks/access-application-cluster/create-external-load-balancer.md into Japanese
1 parent 1a8514c commit dfa5b6b

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
---
2+
title: 外部ロードバランサーを作成する
3+
content_type: task
4+
weight: 80
5+
---
6+
7+
<!-- overview -->
8+
9+
このページでは、外部ロードバランサーを作成する方法について説明します。
10+
11+
{{< glossary_tooltip text="Service" term_id="service" >}}を作成する際に、クラウドロードバランサーを自動的に作成するオプションがあります。
12+
これにより、外部からアクセス可能なIPアドレスが割り当てられ、そのIPからのトラフィックがクラスター内のノード上の正しいポートへと送信されます。
13+
_ただし、クラスターが対応する環境で実行されており、適切なクラウドロードバランサープロバイダーのパッケージが構成されている必要があります_
14+
15+
Serviceの代わりに、{{< glossary_tooltip term_id="ingress" >}}を使用することもできます。
16+
詳細については、[Ingress](/ja/docs/concepts/services-networking/ingress/)のドキュメントを参照してください。
17+
18+
## {{% heading "prerequisites" %}}
19+
20+
21+
{{< include "task-tutorial-prereqs.md" >}}
22+
23+
クラスターは、外部ロードバランサーの構成をサポートするクラウド環境、またはそれに相当する他の環境上で実行されている必要があります。
24+
25+
<!-- steps -->
26+
27+
## Serviceを作成する
28+
29+
### マニフェストからServiceを作成する
30+
31+
外部ロードバランサーを作成するには、Serviceのマニフェストに次の行を追加します:
32+
33+
```yaml
34+
type: LoadBalancer
35+
```
36+
37+
マニフェストは次のようになります:
38+
39+
```yaml
40+
apiVersion: v1
41+
kind: Service
42+
metadata:
43+
name: example-service
44+
spec:
45+
selector:
46+
app: example
47+
ports:
48+
- port: 8765
49+
targetPort: 9376
50+
type: LoadBalancer
51+
```
52+
53+
### kubectlを使用してServiceを作成する
54+
55+
代わりに、`kubectl expose`コマンドとその`--type=LoadBalancer`フラグを使用してServiceを作成することも可能です:
56+
57+
```bash
58+
kubectl expose deployment example --port=8765 --target-port=9376 \
59+
--name=example-service --type=LoadBalancer
60+
```
61+
62+
このコマンドは、参照されているリソース(上記の例では`example`という名前の{{< glossary_tooltip text="Deployment" term_id="deployment" >}})と同じセレクターを使用して、新しいServiceを作成します。
63+
64+
オプションのフラグを含む詳細については、[`kubectl expose`のリファレンス](/docs/reference/generated/kubectl/kubectl-commands/#expose)を参照してください。
65+
66+
## IPアドレスの確認
67+
68+
`kubectl`を使用してServiceの情報を取得することで、そのServiceに割り当てられたIPアドレスを確認できます:
69+
70+
```bash
71+
kubectl describe services example-service
72+
```
73+
74+
このコマンドの出力は次のようになります:
75+
76+
```
77+
Name: example-service
78+
Namespace: default
79+
Labels: app=example
80+
Annotations: <none>
81+
Selector: app=example
82+
Type: LoadBalancer
83+
IP Families: <none>
84+
IP: 10.3.22.96
85+
IPs: 10.3.22.96
86+
LoadBalancer Ingress: 192.0.2.89
87+
Port: <unset> 8765/TCP
88+
TargetPort: 9376/TCP
89+
NodePort: <unset> 30593/TCP
90+
Endpoints: 172.17.0.3:9376
91+
Session Affinity: None
92+
External Traffic Policy: Cluster
93+
Events: <none>
94+
```
95+
96+
ロードバランサーのIPアドレスは、`LoadBalancer Ingress`の横に表示されます。
97+
98+
{{< note >}}
99+
Minikube上でServiceを実行している場合は、次のコマンドで割り当てられたIPアドレスとポートを確認できます:
100+
101+
```bash
102+
minikube service example-service --url
103+
```
104+
{{< /note >}}
105+
106+
## クライアントの送信元IPアドレスを保持する
107+
108+
デフォルトでは、ターゲットコンテナから見える送信元IPは、クライアントの*元の送信元IPアドレスではありません*。
109+
クライアントIPの保持を有効にするには、Serviceの`.spec`内で次のフィールドを設定する必要があります:
110+
111+
* `.spec.externalTrafficPolicy` - このServiceが外部トラフィックをノードローカルのエンドポイントにルーティングするか、クラスター全体のエンドポイントにルーティングするかを指定します。指定可能な値は`Cluster`(デフォルト)と`Local`の2つです。`Cluster`を指定するとクライアントの送信元IPは隠蔽され、他のノードへの2回目のホップが発生する可能性がありますが、全体的な負荷分散は良好になります。`Local`を指定するとクライアントの送信元IPが保持され、LoadBalancer型およびNodePort型Serviceにおいて2回目のホップを回避できますが、トラフィックの分散が偏るリスクがあります。
112+
* `.spec.healthCheckNodePort` - Serviceのヘルスチェック用ノードポート(数値のポート番号)を指定します。`healthCheckNodePort`を指定しない場合、ServiceコントローラーがクラスターのNodePortレンジから自動的にポートを割り当てます。
113+
このポートレンジは、APIサーバーのコマンドラインオプション`--service-node-port-range`で設定できます。Serviceの`type`がLoadBalancerで、`externalTrafficPolicy`が`Local`に設定されている場合に限り、指定した`healthCheckNodePort`の値が使用されます。
114+
115+
Serviceのマニフェストで`externalTrafficPolicy`をLocalに設定することで、この機能が有効になります。
116+
たとえば、次のように指定します:
117+
118+
```yaml
119+
apiVersion: v1
120+
kind: Service
121+
metadata:
122+
name: example-service
123+
spec:
124+
selector:
125+
app: example
126+
ports:
127+
- port: 8765
128+
targetPort: 9376
129+
externalTrafficPolicy: Local
130+
type: LoadBalancer
131+
```
132+
133+
### 送信元IPアドレスを保持する際の注意点と制限事項
134+
135+
一部のクラウドプロバイダーが提供するロードバランサーサービスでは、各ターゲットに対して異なる重みを設定することができません。
136+
137+
各ターゲットがノードへのトラフィック送信において等しく重み付けされているため、外部トラフィックは異なるPod間で均等に負荷分散されません。外部ロードバランサーは、ターゲットとして使用される各ノード上のPod数を認識していません。
138+
139+
`NumServicePods << NumNodes`または`NumServicePods >> NumNodes`の場合、重み付けがなくても、かなり均等に近い分散が見られます。
140+
141+
Pod間の内部トラフィックは、すべてのPodに対して等しい確率で、ClusterIPサービスと同様の動作をするはずです。
142+
143+
## ロードバランサーのガベージコレクション
144+
145+
{{< feature-state for_k8s_version="v1.17" state="stable" >}}
146+
147+
通常、LoadBalancer型Serviceが削除されると、それに関連付けられたクラウドプロバイダー上のロードバランサーリソースも速やかにクリーンアップされるはずです。
148+
しかし、Serviceの削除後に関連するクラウドリソースが孤立状態になるさまざまなコーナーケースが知られています。
149+
これを防ぐために、「Service LoadBalancerのFinalizer保護」が導入されました。
150+
Finalizerを使用することで、対応するロードバランサーリソースが削除されるまでは、Serviceリソース自体も削除されなくなります。
151+
152+
具体的には、`type`がLoadBalancerであるServiceには、`service.kubernetes.io/load-balancer-cleanup`という名前のFinalizerがサービスコントローラーによって付与されます。
153+
このFinalizerは、ロードバランサーリソースがクリーンアップされるまで削除されません。
154+
これにより、たとえばサービスコントローラーがクラッシュするようなコーナーケースにおいても、ロードバランサーリソースが取り残されるのを防ぐことができます。
155+
156+
## 外部ロードバランサープロバイダー
157+
158+
この機能のデータパスは、Kubernetesクラスター外部のロードバランサーによって提供されることに注意が必要です。
159+
160+
Serviceの`type`がLoadBalancerに設定されている場合、Kubernetesはクラスター内のPodに対しては`type`がClusterIPに相当する機能を提供し、さらに(Kubernetesの外部にある)ロードバランサーに、該当するPodをホストしているノードの情報を登録することで、この機能を拡張します。
161+
Kubernetesのコントロールプレーンは、外部ロードバランサーの作成、必要に応じたヘルスチェックやパケットフィルタリングルールの設定を自動で行います。
162+
クラウドプロバイダーによってロードバランサーのIPアドレスが割り当てられると、コントロールプレーンはその外部IPアドレスを取得し、Serviceオブジェクトに反映します。
163+
164+
## {{% heading "whatsnext" %}}
165+
166+
* [アプリケーションをServiceに接続する](/ja/docs/tutorials/services/connect-applications-service/)チュートリアルを参照してください
167+
* [Service](/ja/docs/concepts/services-networking/service/)について読む
168+
* [Ingress](/ja/docs/concepts/services-networking/ingress/)について読む

0 commit comments

Comments
 (0)