2021年3月5日金曜日

kubernetes 公式の ingress-nginx を試してみた

概要

前回は Nginx 社が開発している nginx-ingress-controller を試してみました
今回は kubernetes 公式が開発している ingress-nginx を試してみました
ほぼ同じですがデプロイ方法や機能が実感異なります

環境

  • Ubuntu 18.04
  • k8s v1.20.4
  • nginx 1.19.6

普通にデプロイ

helm を使います

  • helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
  • helm repo update
  • helm install ingress-nginx ingress-nginx/ingress-nginx

動作確認

NodePort で Service が Expose されているのでそこにアクセスすれば nginx の 404 画面にアクセスできます
Service へのアクセスは前回同様 Host と Path ベースの Ingress を定義する感じになります

削除

helm を使って削除します

  • helm delete ingress-nginx -n ingress-nginx

hostNetwork を使う

NodePort を使った場合は 30000 番ポート以上のハイポートで LISTEN することになります
ingress-nginx を使うとホストネットワークを使ってポートバインドすることもできます
290 行目あたりにある Deployment の設定を手動で変更します

  • wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.44.0/deploy/static/provider/baremetal/deploy.yaml
  • vim deploy.yaml
# Source: ingress-nginx/templates/controller-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    helm.sh/chart: ingress-nginx-3.23.0
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.44.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/component: controller
  revisionHistoryLimit: 10
  minReadySeconds: 0
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/component: controller
    spec:
      hostNetwork: true # <- ここを追記

あとはデプロイするだけです

  • kubectl apply -f deploy.yaml

削除

helm を使っていないので namespace ごと削除しましょう

  • kubectl delete ns ingress-nginx

トラブルシューティング

Nginx 版の nginx-ingress-controller がすでにデプロイされている環境にデプロイしようとすると以下のエラーが発生しました
kubernetes 版と Nginx 版は共存しないほうが良さそうです

The IngressClass "nginx" is invalid: spec.controller: Invalid value: "k8s.io/ingress-nginx": field is immutable

最後に

helm を使って簡単にインストールできるのでこちらのほうが良いかもしれません

参考サイト

0 件のコメント:

コメントを投稿