現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.25
Kubernetes v1.25 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン
Minikube上でNGINX Ingressコントローラーを使用してIngressをセットアップする
Ingressとは、クラスター内のServiceに外部からのアクセスを許可するルールを定義するAPIオブジェクトです。IngressコントローラーはIngress内に設定されたルールを満たすように動作します。
このページでは、簡単なIngressをセットアップして、HTTPのURIに応じてwebまたはweb2というServiceにリクエストをルーティングする方法を説明します。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください:kubectl version.Minikubeクラスターを作成する
- Launch Terminalをクリックします。 
- (オプション) Minikubeをローカル環境にインストールした場合は、次のコマンドを実行します。 - minikube start
Ingressコントローラーを有効化する
- NGINX Ingressコントローラーを有効にするために、次のコマンドを実行します。 - minikube addons enable ingress
- NGINX Ingressコントローラーが起動したことを確認します。 - kubectl get pods -n kube-system備考: このコマンドの実行には数分かかる場合があります。- 出力は次のようになります。 - NAME READY STATUS RESTARTS AGE default-http-backend-59868b7dd6-xb8tq 1/1 Running 0 1m kube-addon-manager-minikube 1/1 Running 0 3m kube-dns-6dcb57bcc8-n4xd4 3/3 Running 0 2m kubernetes-dashboard-5498ccf677-b8p5h 1/1 Running 0 2m nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m storage-provisioner 1/1 Running 0 2m
Hello Worldアプリをデプロイする
- 次のコマンドを実行して、Deploymentを作成します。 - kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0- 出力は次のようになります。 - deployment.apps/web created
- Deploymentを公開します。 - kubectl expose deployment web --type=NodePort --port=8080- 出力は次のようになります。 - service/web exposed
- Serviceが作成され、NodePort上で利用できるようになったことを確認します。 - kubectl get service web- 出力は次のようになります。 - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
- NodePort経由でServiceを訪問します。 - minikube service web --url- 出力は次のようになります。 - http://172.17.0.15:31637備考: Katacoda環境の場合のみ: 上部のterminalパネルでプラスのアイコンをクリックして、Select port to view on Host 1(Host 1を表示するポートを選択)をクリックします。NodePort(上の例では- 31637)を入力して、Display Port(ポートを表示)をクリックしてください。- 出力は次のようになります。 - Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564- これで、MinikubeのIPアドレスとNodePort経由で、サンプルアプリにアクセスできるようになりました。次のステップでは、Ingressリソースを使用してアプリにアクセスできるように設定します。 
Ingressリソースを作成する
以下に示すファイルは、hello-world.info経由で送られたトラフィックをServiceに送信するIngressリソースです。
- 以下の内容で - example-ingress.yamlを作成します。- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - host: hello-world.info http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 8080
- 次のコマンドを実行して、Ingressリソースを作成します。 - kubectl apply -f https://kubernetes.io/examples/service/networking/example-ingress.yaml- 出力は次のようになります。 - ingress.networking.k8s.io/example-ingress created
- 次のコマンドで、IPアドレスが設定されていることを確認します。 - kubectl get ingress備考: このコマンドの実行には数分かかる場合があります。- NAME CLASS HOSTS ADDRESS PORTS AGE example-ingress <none> hello-world.info 172.17.0.15 80 38s
- 次の行を - /etc/hostsファイルの最後に書きます。備考: Minikubeをローカル環境で実行している場合、- minikube ipコマンドを使用すると外部のIPが取得できます。Ingressのリスト内に表示されるIPアドレスは、内部のIPになるはずです。- 172.17.0.15 hello-world.info- この設定により、リクエストがhello-world.infoからMinikubeに送信されるようになります。 
- Ingressコントローラーがトラフィックを制御していることを確認します。 - curl hello-world.info- 出力は次のようになります。 - Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564備考: Minikubeをローカル環境で実行している場合、ブラウザからhello-world.infoにアクセスできます。
2番目のDeploymentを作成する
- 次のコマンドを実行して、v2のDeploymentを作成します。 - kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0- 出力は次のようになります。 - deployment.apps/web2 created
- Deploymentを公開します。 - kubectl expose deployment web2 --port=8080 --type=NodePort- 出力は次のようになります。 - service/web2 exposed
Ingressを編集する
- 既存の - example-ingress.yamlを編集して、以下の行を追加します。- - path: /v2 pathType: Prefix backend: service: name: web2 port: number: 8080
- 次のコマンドで変更を適用します。 - kubectl apply -f example-ingress.yaml- 出力は次のようになります。 - ingress.networking/example-ingress configured
Ingressを試す
- Hello Worldアプリの1番目のバージョンにアクセスします。 - curl hello-world.info- 出力は次のようになります。 - Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564
- Hello Worldアプリの2番目のバージョンにアクセスします。 - curl hello-world.info/v2- 出力は次のようになります。 - Hello, world! Version: 2.0.0 Hostname: web2-75cd47646f-t8cjk備考: Minikubeをローカル環境で実行している場合、ブラウザからhello-world.infoおよびhello-world.info/v2にアクセスできます。
次の項目
- Ingressについてさらに学ぶ。
- Ingressコントローラーについてさらに学ぶ。
- Serviceについてさらに学ぶ。