Ingressの基本を紹介し、シンプルなIngressのYAML例を示す
このステップでは、Kubernetesクラスタ内のサービスへの外部アクセスを管理する強力な方法であるKubernetes Ingressについて学びます。
Ingressとは何ですか?
Ingressは、Kubernetesクラスタ内のサービスへの外部アクセス(通常はHTTP)を管理するAPIオブジェクトです。Ingressは以下の機能を提供します。
- ロードバランシング:トラフィックを複数のバックエンドサービスに分散させます。
- SSL/TLS終端:安全な接続を処理します。
- 名前ベースの仮想ホスティング:ホスト名に基づいてリクエストを異なるサービスにルーティングします。
- パスベースのルーティング:URLパスに基づいてリクエストを異なるサービスにルーティングします。
Ingressは2つのコンポーネントで構成されています。
- Ingressリソース:ルーティングルールを定義するKubernetes APIオブジェクト
- Ingressコントローラ:Ingressリソースで定義されたルールを適用する実装
注意:この実験ではIngressの基本的な紹介のみを提供しています。本番環境では、Ingressの設定ははるかに複雑になり、高度なルーティング、認証、レート制限などが含まれます。
MinikubeでIngressアドオンを有効にしましょう。
minikube addons enable ingress
出力例:
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
🔉 ingress was successfully enabled
2つのサンプルアプリケーションのデプロイメントを作成します。
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
これらのデプロイメントをサービスとして公開します。
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
IngressのYAMLファイルを作成します。
nano ingress-example.yaml
以下のIngress設定を追加します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
このIngress設定の主要なコンポーネント:
- metadata.annotations:Ingressコントローラの特定の設定
- spec.rules:トラフィックをサービスにルーティングする方法を定義します。
- path:一致するURLパス
- pathType:パスの一致方法(Prefix、Exact、またはImplementationSpecific)
- backend.service:トラフィックをルーティングするサービスとポート
Ingress設定を適用します。
kubectl apply -f ingress-example.yaml
Ingressリソースを確認します。
kubectl get ingress
出力例:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Ingressの詳細を確認します。
kubectl describe ingress example-ingress
出力例にはルーティングルールとバックエンドサービスが表示されます。
Ingressのテスト:
## Get the Minikube IP
minikube ip
## Test access to the services through Ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
各コマンドは、それぞれのWebサーバーのデフォルトページを返すはずです。
本番環境では、Ingressを以下のように設定できます。
- 複数のホスト名ベースのルール
- HTTPS用のTLS証明書
- 認証メカニズム
- レート制限
- カスタムタイムアウト設定
- セッションアフィニティ
- その他多数の高度な機能
Ingressのより包括的な情報については、Kubernetesのドキュメントを参照し、NGINX IngressやTraefikなどの専用のIngressコントローラのドキュメントを調べることを検討してください。