目次
Ingress とは
Ingress は、kubernetes クラスタの外から kubernetes クラスタ内の Service に HTTP や HTTPS プロトコルのアクセスを提供、管理する API オブジェクトです。Ingress は負荷分散や SSL ターミネーション(終端)、ホスト名(Host ヘッダー)ベースのルーティングといった機能を提供します。
Kubernetes クラスターで Ingress を利用するには、Ingress コントローラーと Ingress リソースを作成する必要があります。
minikube で Ingress コントローラーを有効にする手順
minikube を起動
minikube start
minikube の Ingress コントローラー addons を有効化
minikube addons enable ingress
コマンドを実行すると、次の出力にあるように NGINX Ingress コントローラーが有効になります。Ingress コントローラーはいくつか種類があり、Ingress コントローラーによってサポートするアノテーションなどが異なります。
$ minikube addons enable ingress
▪ Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
▪ Using image k8s.gcr.io/ingress-nginx/controller:v1.0.0-beta.3
▪ Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
🔎 Verifying ingress addon...
🌟 The 'ingress' addon is enabled
$
NGINX Ingress コントローラーの起動確認
起動すると次のようになります。
$ kubectl get pods -A | grep nginx-controller
ingress-nginx ingress-nginx-controller-69bdbc4d57-vh2d7 1/1 Running 0 99m
$
Ingress リソースの作成
Ingress コントローラーができたら次は Ingress リソースを作成します。Ingress リソースを作る yaml ファイルを一から作成するのは手間であり、yaml の書式などを間違えやすいので kubernetes のドキュメントにある最小構成の Ingress 定義ファイルを利用します。次のコマンド例では wget を利用していますが、wget できない場合は、引数にある URL をブラウザなどで表示させ、内容をコピーして minimal-ingress.yaml というファイル名のファイルを作成ください。
wget https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/service/networking/minimal-ingress.yaml
ダウンロード(または作成)した minimal-ingress.yaml ファイルの中身を次のように2箇所書き換えます。1つ目は paths: の下の行にある「- path: /」で、2つ目は service: の下にある「name: minimal-release-kong-proxy」です。設定した内容は、path の「/」にマッチしたリクエストを kubernetes service の「minimal-release-kong-proxy」というサービスの 80 番ポートに転送するというものです。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minimal-release-kong-proxy
port:
number: 80
ファイルが用意できたら kubectl apply コマンドで適用します。kubernetes のネームスペース指定を忘れないように注意してください。もし apply 先を間違ったネームスペースなどに適用してしまった場合は、「$ kubectl delete ingress minimal-ingress」などで削除してやり直してください。
kubectl apply -f minimal-ingress.yaml -n kong
問題なく Ingress リソースが作成されれば、以下のようになります。ADDRESS 項目にある IP アドレスは、$ minikube ip コマンドの出力(kubernetes クラスターノードの IP アドレス)と一致すると思います。
$ kubectl get ingress -n kong
NAME CLASS HOSTS ADDRESS PORTS AGE
minimal-ingress nginx * 192.168.49.2 80 99s
$
また、Ingress リソース作成時に設定したルールが適用されているか確認するには、kubectl describe コマンドで Ingress リソースの詳細を表示して確認します。設定したルールは、「Rules:」という項目に表示されます。
$ kubectl describe ingress minimal-ingress -n kong
Name: minimal-ingress
Labels: <none>
Namespace: kong
Address: 192.168.49.2
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
*
/ minimal-release-kong-proxy:80 (172.17.0.3:8000)
Annotations: nginx.ingress.kubernetes.io/rewrite-target: /
Events: <none>
$
上記の Rules: という項目に Path「/」, Backends「minimal-release-kong-proxy:80」という内容が確認できます。これで Ingress コントローラーの作成とリソース作成は終わりです。