Tags:

オンプレk8sでingress-nginxを設定する記事があんまり見つからないので苦労したのでメモ

環境

Master Clusterともに同じ環境です
説明の都合上
Masterは192.168.1.10
Cluster1は192.168.1.11
で説明します

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T11:55:20Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T12:22:21Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T11:55:20Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

インストール

基本的にymlをドキュメント通り入れるだけです

$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml \ 
    | kubectl apply -f  - 
$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml \
    | kubectl apply -f -
$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/configmap.yaml \
    | kubectl apply -f -
$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/tcp-services-configmap.yaml \
    | kubectl apply -f -
$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/udp-services-configmap.yaml \
    | kubectl apply -f -

1.9だとRBACが有効になっているのでRBACの設定も投入します

$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml \
    | kubectl apply -f -
$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml \
    | kubectl apply -f -

デフォルトのままだと外部からアクセスすることができないため外部からアクセスする手段を提供する必要があります
現在ここから先のベストな解がわかっていなくてちょっと困っていますが外部からアクセスできるところまではいけたのでメモしておきます

$ kubectl edit deployment nginx-ingress-controller -n ingress-nginx
~省略~
      dnsPolicy: ClusterFirst
+      hostNetwork: true
      restartPolicy: Always

これでClusterの全てにそれぞれNginxがホストネットワークモードで配備されるので192.168.1.0/24下から

$ curl 192.168.1.11 -H "Host: Ingressで設定したホスト名"

とすることで閲覧できるようになっているはずです

気になること

hostNetwork: trueとするのが正しいのかちょっと気になる

素直にやるならNodePortで80と443を公開すれば良いはず…(これとか
ですが入れても外部から見せるためにはExternalIPを明示的に指定する必要があってこれじゃない感があります
hosPortで80と443だけ公開するのが綺麗な手段に見えるんですが理解不足もあって上手くいってないです

type: LoadBalancerを使えばExternal IPが自動で付与されるらしいですがクラウドサービス側から提供されるものらしいのでオンプレ環境で使うのは大変そうです
zlabjp/nghttpx-ingress-lbとかもあるのでこちらを使った方が良いのかもしれないですね

参考サイト

関係してそうなページ



コメント