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 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のリクエスト負荷分散の動作を確認するための手順を書いた。