2021年4月12日月曜日

k8s ingress-nginx で hostNetwork を使えば 80 or 443 で LISTEN することができる

k8s ingress-nginx で hostNetwork を使えば 80 or 443 で LISTEN することができる

概要

過去 に ingress-nginx を helm を使ってデプロイする方法を紹介しました
hostNetwork についても少し触れていたのですが改めて動作確認してみました
またこのやり方はテスト環境などクラウドロードバランサを用意できない場合に使いましょう
プロダクションなどでは採用しないようが良いです

環境

  • k8s 1.20.1
  • ingress-nginx chart 3.26.0

ingress-nginx controller のデプロイ

オプションで hostNetwork をオンにします
またその際にデプロイするモードを Damonset にする必要があります

  • helm install hostnetwork-test-ingress ingress-nginx/ingress-nginx --set controller.hostNetwork=true --set controller.service.type="" --set controller.kind=DaemonSet

これで各ノードに ingress-nginx controller がデプロイされ各ノードで 80/443 が LISTEN されます

動作確認

適当に Web アプリをデプロイし Ingress を作成して Ingress 経由でアプリにアクセスできるか確認してみましょう

  • helm install request-dumper request-dumper/request-dumper
  • kubectl get svc request-dumper
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE  
request-dumper NodePort 10.104.206.212 <none> 8080:31036/TCP 16m

8080 ポートに Ingress で接続するように Ingress を作成します

  • vim ingress.yml
apiVersion: networking.k8s.io/v1beta1  
kind: Ingress  
metadata:  
  name: hostnetwork-test-ingress  
  annotations:  
    kubernetes.io/ingress.class: "nginx"  
spec:  
  rules:  
    - host: foo.bar.com  
      http:  
        paths:  
          - path: /  
            backend:  
              serviceName: request-dumper  
              servicePort: 8080
  • kubectl apply -f ingress.yml
  • curl -H "Host: [foo.bar.com](http://foo.bar.com/)" 192.168.100.10

こんな感じでノードの 80 番でアクセスできるのが確認できると思います

最後に

あくまでもテストで使うようにしましょう

参考サイト

0 件のコメント:

コメントを投稿