minikube で Ingress コントローラーとリソースを作成する手順

4 min 292 views

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 コントローラーの作成とリソース作成は終わりです。

関連記事