Files
inductor 0c86e6515a First Japanese l10n work for release-1.16 (#18790)
* Translate concepts/services-networking/connect-applications-service/ into Japanese (#17710)

* Translate concepts/services-networking/connect-applications-service/ into Japanese

* Apply review

* Translate content/ja/docs/tasks/_index.md into Japanese (#17789)

* add task index

* huge page

* ja-docs: Update kops Installation Steps (#17804)

* Update /ja/docs/tasks/tools/install-minikube/ (#17711)

* Update /ja/docs/tasks/tools/install-minikube/

* Apply review

* Apply review

* Update content/ja/docs/tasks/tools/install-minikube.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/tools/install-minikube.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Translate tasks/configure-pod-container/assign-cpu-resource/ in Japanese (#16160)

* copy from content/en/docs/tasks/configure-pod-container/ to ja

* translate assign-cpu-resource.md in Japanese

* Update content/ja/docs/tasks/configure-pod-container/assign-cpu-resource.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/configure-pod-container/assign-cpu-resource.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update assign-cpu-resource.md

ここの *request* と *limit* はほかの文中の単語とは異なり、YAMLのfieldを表すため、訳さないでおく

* fix translation

"Pod scheduling is based on requests." の箇所。
requestsに基づいているのは事実だが、直訳されたときになにを指すのかあいまいなので、対象を具体的に記述

* Translate concepts/workloads/controllers/deployment/ in Japanese #14848 (#17794)

* ja-trans: Translate concepts/workloads/controllers/deployment/ into Japanese (#14848)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/deployment/ (#14848)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/deployment/ (#14848)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/deployment/ (#14848)

* little fix (#18135)

* update index (#18136)

* Update /ja/docs/setup/_index.md (#18139)

* Update /ja/docs/tasks/tools/install-kubectl/ (#18137)

* update /docs/ja/tasks/tools/install-kubectl/

* fix mongon

* apply reveiw

* Update /ja/docs/reference/command-line-tools-reference/feature-gates/ (#18141)

* Update feature agete

* tidy up feature gates list

* translate new lines

* table caption

* blank

* する -> します

* apply review

* fix broken link

* Update content/ja/docs/reference/command-line-tools-reference/feature-gates.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* update translation

* remove line

* Update content/ja/docs/reference/command-line-tools-reference/feature-gates.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* rollpack

* Update /ja/docs/concepts/services-networking/service/ (#18138)

* update /ja/docs/concepts/services-networking/service/

* Update content/ja/docs/concepts/services-networking/service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/services-networking/service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/services-networking/service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/services-networking/service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* consider Endpoints as a Kubernetes resource

* full

* Update content/ja/docs/concepts/_index.md (#18145)

* Update concepts

* control plane

* apply review

* fix bold (#18165)

* Update /ja/docs/concepts/overview/components.md (#18153)

* update /ja/docs/concepts/overview/components.md

* some japanese docs are already there

* translate prepend

* apply upstream changes (#18278)

* Translate concepts/services-networking/ingress into Japanese #17741 (#18234)

* ja-trans: Translate concepts/services-networking/ingress into Japanese (#17741)

* ja-trans: Improve Japanese translation in concepts/services-networking/ingress (#17741)

* ja-trans: Improve Japanese translation in concepts/services-networking/ingress (#17741)

* Update pod overview in Japanese (#18277)

* Update pod-overview

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* ノード

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/concepts/workloads/pods/pod-overview.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>

* Translate concepts/scheduling/scheduler-perf-tuning/ in Japanese #17119 (#17796)

* ja-trans: Translate concepts/scheduling/scheduler-perf-tuning/ into Japanese (#17119)

* ja-trans: Improve Japanese translation in concepts/scheduling/scheduler-perf-tuning/ (#17119)

* ja-trans: Improve Japanese translation in concepts/scheduling/scheduler-perf-tuning/ (#17119)

* ja-trans:conetent/ja/casestudies/nav (#18450)

* Translate tasks/debug-application-cluster/debug-service/ in Japanese (#18395)

* Translate tasks/debug-application-cluster/debug-service/ in Japanese

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Change all `Pods` to `Pod` and `Endpoints` to `Endpoint`

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Updated content pointed out in review

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Apply suggestions from code review

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Apply suggestions from review

* Apply suggestions form review

* Apply suggestions from review

* Apply suggestions from review

* Apply suggestions from code review

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/debug-application-cluster/debug-service.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

Co-authored-by: inductor <kohei.ota@zozo.com>
Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>

* Translate concepts/extend-kubernetes/api-extension/custom-resources/ into Japanese (#18200)

* Translate concepts/extend-kubernetes/api-extension/custom-resources/ into Japanese

* Apply suggestions from code review between L1 an L120 by oke-py

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Apply suggestions from code review by oke-py

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update CustomResourceDefinition not to localize into Japanese

* Revert the link to customresourcedefinitions to English

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Apply suggestions from code review by oke-py and inductor

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>
Co-Authored-By: inductor <kohei.ota@zozo.com>

* Apply a suggestion from review by inductor

* Apply a suggestion from code review by oke-py

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>
Co-authored-by: inductor <kohei.ota@zozo.com>

* Translate tasks/configure-pod-container/quality-service-pod/ into Japanese (#16173)

* copy from content/en/docs/tasks/configure-pod-container/quality-service-pod.md to Ja

* Translate tasks/configure-pod-container/quality-service-pod/ into Japanese

Guaranteed, Burstable, BestEffortは用語として存在するので訳さない

Signed-off-by: Takuma Hashimoto <takumaxd+github@gmail.com>

* Update content/ja/docs/tasks/configure-pod-container/quality-service-pod.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/configure-pod-container/quality-service-pod.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/configure-pod-container/quality-service-pod.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* Update content/ja/docs/tasks/configure-pod-container/quality-service-pod.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>

* Translate content/ja/docs/reference/kubectl/cheatsheet.md (#17739) (#18285)

* Translate content/ja/docs/reference/kubectl/cheatsheet.md (#17739)

* Translated kubectl cheet sheet.

* Fix typos in content/ja/docs/reference/kubectl/cheatsheet.md (#17739)

* Fix japanese style in content/ja/docs/reference/kubectl/cheatsheet.md

* Fix typo in content/ja/docs/reference/kubectl/cheatsheet.md

* Fix translation in content/ja/docs/reference/kubectl/cheatsheet.md

* Fix typo in content/ja/docs/reference/kubectl/cheatsheet.md

* Fix typo in content/ja/docs/reference/kubectl/cheatsheet.md

* Modify translation for casestudies (#18767)

* modify terminology

* add ten

* update translation

* update

* update

* update

* fix typo (#18769)

* remove english comment (#18770)

* ja-trans:conetent/ja/casestudies/spotify  (#18451)

* ja-trans: content/ja/case-studies/spotify

* Update content/ja/case-studies/spotify/index.html

Updated with the proposal  from inductor

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Updated with inductor 's proposal

Co-Authored-By: inductor <kohei.ota@zozo.com>

* ja-trans: content/ja/case-studies/spotify

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

* Update content/ja/case-studies/spotify/index.html

Co-Authored-By: inductor <kohei.ota@zozo.com>

Co-authored-by: inductor <kohei.ota@zozo.com>

* Translate Japanese headers (#18776)

* translate headers

* add index for references

* Update content/ja/docs/setup/production-environment/tools/_index.md

Co-Authored-By: Naoki Oketani <okepy.naoki@gmail.com>

* translate controller

Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>

* ja-docs: translate install-kubeadm into Japanese (#18198)

* ja-docs: translate install-kubeadm into Japanese

* translate table title in install-kubeadm to Japanese

* update kubeadm install doc

* remove extra spaces

* fix translation miss

* translate url title into japanese

* fix translation miss

* remove line break in sentence and translate title

* remove extra line break

* remove extra line break

* fix translation miss

Co-authored-by: Naoki Oketani <okepy.naoki@gmail.com>
Co-authored-by: Samuel Kihahu <kihahu@users.noreply.github.com>
Co-authored-by: Takuma Hashimoto <takuma-hashimoto@freee.co.jp>
Co-authored-by: Keita Akutsu <kakts.git@gmail.com>
Co-authored-by: Masa Taniguchi <maabou512@gmail.com>
Co-authored-by: Soto Sugita <sotoiwa@gmail.com>
Co-authored-by: Kozzy Hasebe <48105562+hasebe@users.noreply.github.com>
Co-authored-by: kazuaki harada <canhel.4suti50y.salamander@gmail.com>
Co-authored-by: Shunsuke Miyoshi <s.miyoshi@jp.fujitsu.com>
2020-01-20 20:39:36 -08:00

20 KiB

title, content_template, weight
title content_template weight
Ingress templates/concept 40

{{% capture overview %}} {{< feature-state for_k8s_version="v1.1" state="beta" >}} {{< glossary_definition term_id="ingress" length="all" >}} {{% /capture %}}

{{% capture body %}}

用語

まずわかりやすくするために、このガイドでは次の用語を定義します。

  • ノード: Kubernetes内のワーカーマシンで、クラスターの一部です。

  • クラスター: Kubernetesによって管理されているコンテナ化されたアプリケーションを実行させるノードのセットです。この例や、多くのKubernetesによるデプロイでは、クラスター内のノードはパブリックインターネットとして公開されていません。

  • エッジルーター: クラスターでファイアウォールのポリシーを強制するルーターです。エッジルーターはクラウドプロバイダーやハードウェアの物理的な一部として管理されたゲートウェイとなります。

  • クラスターネットワーク: 物理的または論理的なリンクのセットで、Kubernetesのネットワークモデルによって、クラスター内でのコミュニケーションを司るものです。

  • Service: {{< glossary_tooltip text="ラベル" term_id="label" >}}セレクターを使ったPodのセットを特定するKubernetes {{< glossary_tooltip term_id="service" >}}です。特に言及がない限り、Serviceはクラスターネットワーク内でのみ疎通可能な仮想IPを持つと想定されます。

Ingressとは何か

Ingressはクラスター外からクラスター内{{< link text="Service" url="/docs/concepts/services-networking/service/" >}}へのHTTPとHTTPSのルートを公開します。トラフィックのルーティングはIngressリソース上で定義されるルールによって制御されます。

    internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

IngressはServiceに対して、外部疎通できるURL、負荷分散トラフィック、SSL/TLS終端の機能や、名前ベースの仮想ホスティングを提供するように構成できます。Ingressコントローラーは通常はロードバランサーを使用してIngressの機能を実現しますが、エッジルーターや、追加のフロントエンドを構成してトラフィックの処理を支援することもできます。

Ingressは任意のポートやプロトコルを公開しません。HTTPやHTTPS以外のServiceをインターネットに公開するときは、Service.Type=NodePortService.Type=LoadBalancerのServiceタイプを使用することが多いです。

Ingressを使用する上での前提条件

Ingressの機能を提供するためにIngressコントローラーを用意する必要があります。Ingressリソースを作成するのみでは何の効果もありません。

ingress-nginxのようなIngressコントローラーのデプロイが必要な場合があります。ユーザーはいくつかのIngressコントローラーの中から選択できます。

理想的には、全てのIngressコントローラーはリファレンスの仕様を満たすべきです。しかし実際には、いくつかのIngressコントローラーは微妙に異なる動作をします。

{{< note >}} Ingressコントローラーのドキュメントを確認して、選択する際の注意点について理解してください。 {{< /note >}}

Ingressリソース

Ingressリソースの最小構成の例は下記のとおりです。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

他の全てのKubernetesリソースと同様に、IngressはapiVersionkindmetadataフィールドが必要です。設定ファイルの利用に関する一般的な情報は、アプリケーションのデプロイコンテナーの設定リソースの管理を参照してください。
Ingressでは、Ingressコントローラーに依存しているいくつかのオプションの設定をするためにアノテーションを使うことが多いです。その例としては、rewrite-targetアノテーションなどがあります。
Ingressコントローラーの種類が異なれば、サポートするアノテーションも異なります。サポートされているアノテーションについて学ぶために、ユーザーが使用するIngressコントローラーのドキュメントを確認してください。

Ingress Specは、ロードバランサーやプロキシーサーバーを設定するために必要な全ての情報を持っています。最も重要なものとして、外部からくる全てのリクエストに対して一致したルールのリストを含みます。IngressリソースはHTTPトラフィックに対してのルールのみサポートしています。

Ingressのルール

各HTTPルールは下記の情報を含みます。

  • オプションで設定可能なホスト名。上記のリソースの例では、ホスト名が指定されていないと、そのルールは指定されたIPアドレスを経由する全てのインバウンドHTTPトラフィックに適用されます。ホスト名が指定されていると(例: foo.bar.com)、そのルールはホストに対して適用されます。
  • パスのリスト(例: /testpath)。各パスにはserviceNameservicePortで定義されるバックエンドが関連づけられます。ロードバランサーがトラフィックを関連づけられたServiceに転送するために、外部からくるリクエストのホスト名とパスが条件と一致させる必要があります。
  • Serviceドキュメントに書かれているように、バックエンドはServiceとポート名の組み合わせとなります。Ingressで設定されたホスト名とパスのルールに一致するHTTP(とHTTPS)のリクエストは、リスト内のバックエンドに対して送信されます。

Ingressコントローラーでは、デフォルトのバックエンドが設定されていることがあります。これはSpec内で指定されているパスに一致しないようなリクエストのためのバックエンドです。

デフォルトのバックエンド

ルールが設定されていないIngressは、全てのトラフィックをデフォルトのバックエンドに転送します。このデフォルトのバックエンドは、Ingressコントローラーのオプション設定であり、Ingressリソースでは指定されていません。

IngressオブジェクトでHTTPリクエストが1つもホスト名とパスの条件に一致しない時、そのトラフィックはデフォルトのバックエンドに転送されます。

Ingressのタイプ

単一ServiceのIngress

ユーザーは単一のServiceを公開できるという、Kubernetesのコンセプトがあります(Ingressの代替案を参照してください)。 また、Ingressでこれを実現できます。それはルールを設定せずにデフォルトのバックエンド を指定することにより可能です。

{{< codenew file="service/networking/ingress.yaml" >}}

kubectl apply -fを実行してIngressを作成し、その作成したIngressの状態を確認することができます。

kubectl get ingress test-ingress
NAME           HOSTS     ADDRESS           PORTS     AGE
test-ingress   *         107.178.254.228   80        59s

107.178.254.228はIngressコントローラーによって割り当てられたIPで、このIngressを利用するためのものです。

{{< note >}} IngressコントローラーとロードバランサーがIPアドレス割り当てるのに1、2分ほどかかります。この間、ADDRESSの情報は<pending>となっているのを確認できます。 {{< /note >}}

リクエストのシンプルなルーティング

ファンアウト設定では単一のIPアドレスのトラフィックを、リクエストされたHTTP URIに基づいて1つ以上のServiceに転送します。Ingressによって、ユーザーはロードバランサーの数を少なくできます。例えば、下記のように設定します。

foo.bar.com -> 178.91.123.132 -> / foo    service1:4200
                                 / bar    service2:8080

Ingressを下記のように設定します。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: service1
          servicePort: 4200
      - path: /bar
        backend:
          serviceName: service2
          servicePort: 8080

Ingressをkubectl apply -fによって作成したとき:

kubectl describe ingress simple-fanout-example
Name:             simple-fanout-example
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:4200 (10.8.0.90:4200)
               /bar   service2:8080 (10.8.0.91:8080)
Annotations:
  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     22s                loadbalancer-controller  default/test

IngressコントローラーはService(service1service2)が存在する限り、Ingressの条件を満たす実装固有のロードバランサーを構築します。 構築が完了すると、ADDRESSフィールドでロードバランサーのアドレスを確認できます。

{{< note >}} ユーザーが使用しているIngressコントローラーに依存しますが、ユーザーはdefault-http-backendServiceの作成が必要な場合があります。 {{< /note >}}

名前ベースの仮想ホスティング

名前ベースの仮想ホストは、HTTPトラフィックを同一のIPアドレスの複数のホスト名に転送することをサポートしています。

foo.bar.com --|                 |-> foo.bar.com service1:80
              | 178.91.123.132  |
bar.foo.com --|                 |-> bar.foo.com service2:80

下記のIngress設定は、ロードバランサーに対して、Hostヘッダーに基づいてリクエストを転送するように指示するものです。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

rules項目でのホストの設定がないIngressを作成すると、IngressコントローラーのIPアドレスに対するwebトラフィックは、要求されている名前ベースの仮想ホストなしにマッチさせることができます。

例えば、下記のIngressリソースはfirst.bar.comに対するトラフィックをservice1へ、second.foo.comに対するトラフィックをservice2へ、リクエストにおいてホスト名が指定されていない(リクエストヘッダーがないことを意味します)トラフィックはservice3へ転送します。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: second.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
  - http:
      paths:
      - backend:
          serviceName: service3
          servicePort: 80

TLS

TLSの秘密鍵と証明書を含んだ{{< glossary_tooltip term_id="secret" >}}を指定することにより、Ingressをセキュアにできます。現在Ingressは単一のTLSポートである443番ポートのみサポートし、TLS終端を行うことを想定しています。IngressのTLS設定のセクションで異なるホストを指定すると、それらのホストはSNI TLSエクステンション(IngressコントローラーがSNIをサポートしている場合)を介して指定されたホスト名に対し、同じポート上で多重化されます。TLSのSecretはtls.crttls.keyというキーを含む必要があり、TLSを使用するための証明書と秘密鍵を含む値となります。下記が例となります。

apiVersion: v1
kind: Secret
metadata:
  name: testsecret-tls
  namespace: default
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
type: kubernetes.io/tls

IngressでこのSecretを参照すると、クライアントとロードバランサー間の通信にTLSを使用するようIngressコントローラーに指示することになります。作成したTLS Secretは、sslexample.foo.comの完全修飾ドメイン名(FQDN)とも呼ばれる共通名(CN)を含む証明書から作成したものであることを確認する必要があります。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
    - sslexample.foo.com
    secretName: testsecret-tls
  rules:
    - host: sslexample.foo.com
      http:
        paths:
        - path: /
          backend:
            serviceName: service1
            servicePort: 80

{{< note >}} Ingressコントローラーによって、サポートされるTLSの機能に違いがあります。利用する環境でTLSがどのように動作するかを理解するために、nginxや、GCE、他のプラットフォーム固有のIngressコントローラーのドキュメントを確認してください。 {{< /note >}}

負荷分散

Ingressコントローラーは、負荷分散アルゴリズムやバックエンドの重みスキームなど、すべてのIngressに適用されるいくつかの負荷分散ポリシーの設定とともにブートストラップされます。発展した負荷分散のコンセプト(例: セッションの永続化、動的重み付けなど)はIngressによってサポートされていません。代わりに、それらの機能はService用のロードバランサーを介して利用できます。

Ingressによってヘルスチェックの機能が直接に公開されていない場合でも、Kubernetesにおいて、同等の機能を提供するReadiness Probeのようなコンセプトが存在することは注目に値します。コントローラーがどのようにヘルスチェックを行うかについては、コントローラーのドキュメントを参照してください(nginxGCE)。

Ingressの更新

リソースを編集することで、既存のIngressに対して新しいホストを追加することができます。

kubectl describe ingress test
Name:             test
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:80 (10.8.0.90:80)
Annotations:
  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     35s                loadbalancer-controller  default/test
kubectl edit ingress test

このコマンドを実行すると既存の設定をYAMLフォーマットで編集するエディターが表示されます。新しいホストを追加するために、リソースを修正してください。

spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
        path: /foo
  - host: bar.baz.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
        path: /foo
..

変更を保存した後、kubectlはAPIサーバー内のリソースを更新し、Ingressコントローラーに対してロードバランサーの再設定を指示します。

変更内容を確認してください。

kubectl describe ingress test
Name:             test
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:80 (10.8.0.90:80)
  bar.baz.com
               /foo   service2:80 (10.8.0.91:80)
Annotations:
  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     45s                loadbalancer-controller  default/test

修正されたIngressのYAMLファイルに対してkubectl replace -fを実行することで、同様の結果を得られます。

アベイラビリティーゾーンをまたいだ障害について

障害のあるドメインをまたいでトラフィックを分散する手法は、クラウドプロバイダーによって異なります。詳細に関して、Ingress コントローラーのドキュメントを参照してください。複数のクラスターにおいてIngressをデプロイする方法の詳細に関してはKubernetes Cluster Federationのドキュメントを参照してください。

将来追加予定の内容

Ingressと関連するリソースの今後の開発についてはSIG Networkで行われている議論を確認してください。様々なIngressコントローラーの開発についてはIngress リポジトリーを確認してください。

Ingressの代替案

Ingressリソースに直接関与しない複数の方法でServiceを公開できます。

下記の2つの使用を検討してください。

{{% /capture %}}

{{% capture whatsnext %}}