kubeadmで作ったK8sクラスター上にデプロイしたNginx Ingress Controllerでロードバランスを試した

kubeadmで作ったK8sクラスター上にデプロイしたNginx Ingress Controllerでロードバランスを試した。

環境

  • プラットフォーム さくらのVPS 3台 (k8s master * 1, k8s worker * 2)
  • OS: Ubuntu 18.04
  • kubernatis: 1.17.1
  • Docker: 19.03.5
  • 事前準備

    こちらこちらの手順で構築した環境で動作を確認する。

    以下のようなL7ロードバランサを利用するマニフェストを作成する。
    下記3つを1つのファイルとしても良いし別々のファイルにしてapplyするようにしても良い。

    # namespace
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test
    ---
    # ingress
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: lb
      namespace: test
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
    spec:
      rules:
        - host: hogehoge.vs.sakura.ne.jp    # httpへアクセスする際に利用するホスト名
          http:
            paths:
              - path: /apache               # /apache への振り分け設定
                backend:
                  serviceName: apache-svc
                  servicePort: 80
              - path: /nginx                # /nginx への振り分け設定
                backend:
                  serviceName: nginx-svc
                  servicePort: 80
              - path: /
                backend:
                  serviceName: blackhole
                  servicePort: 80
    

    Apacheのマニフェストファイルを下記としておく。

    # apache
    apiVersion: v1
    kind: Service
    metadata:
      name: apache-svc
      namespace: testest
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: httpd
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpd
      namespace: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpd
      template:
        metadata:
          labels:
            app: httpd
        spec:
          containers:
          - image: httpd:alpine
            name: httpd
            ports:
            - containerPort: 80
    

    Nginxのマニフェストファイルを下記としておく。

    # nginx
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
      namespace: test
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:alpine
            name: nginx
            ports:
            - containerPort: 80
    

    Apply後は以下のようになる。

    $ kubectl get pods --all-namespaces
    NAMESPACE        NAME                                                    READY   STATUS    RESTARTS   AGE
    ingress-nginx    nginx-ingress-controller-7ff5fb7dd-bm65r                1/1     Running   0          43d
    kube-system      coredns-6955765f44-5z4ph                                1/1     Running   1          91d
    kube-system      coredns-6955765f44-fcfxs                                1/1     Running   1          91d
    kube-system      etcd-ik1-319-19580.vs.sakura.ne.jp                      1/1     Running   1          91d
    kube-system      kube-apiserver-hogehoge.vs.sakura.ne.jp                 1/1     Running   1          91d
    kube-system      kube-controller-manager-hogehoge.vs.sakura.ne.jp        1/1     Running   1          91d
    kube-system      kube-flannel-ds-amd64-9s4f9                             1/1     Running   1          90d
    kube-system      kube-flannel-ds-amd64-ddzql                             1/1     Running   3          90d
    kube-system      kube-flannel-ds-amd64-jmhwb                             1/1     Running   8          90d
    kube-system      kube-proxy-fpppn                                        1/1     Running   1          91d
    kube-system      kube-proxy-rszww                                        1/1     Running   1          91d
    kube-system      kube-proxy-sl4vt                                        1/1     Running   3          91d
    kube-system      kube-scheduler-hogehoge.vs.akura.ne.jp                  1/1     Running   1          91d
    metallb-system   controller-5df7dc969b-rrgwb                             1/1     Running   0          43d
    metallb-system   speaker-9mppl                                           1/1     Running   2          44d
    metallb-system   speaker-fk8wq                                           1/1     Running   0          44d
    test             httpd-75cb4864cc-xhqj2                                  1/1     Running   0          3d12h
    test             nginx-5c559d5697-58qz9                                  1/1     Running   0          3d11h
    

    こうなったら hogehoge.vs.sakura.ne.jp/nginx, hogehoge.vs.sakura.ne.jp/apache へリクエストして、それぞれのWelocomeページが表示されればOK。

    まとめ

    kubeadmで作成したk8sクラスター上に構築したIngress Controllerを利用して、L7のリクエスト負荷分散の動作を確認するための手順を書いた。

    参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です