はじめに
vSphereへのOpenshiftのデプロイではインストール前提にDNSによる名前解決が要件となっており、サーバや接続先端末にて
api.$CLUSTERDOMAIN api-int.$CLUSTERDOMAIN etcd-0.$CLUSTERDOMAIN etcd-1.$CLUSTERDOMAIN etcd-2.$CLUSTERDOMAIN *.apps.$CLUSTERDOMAIN _etcd-server-ssl._tcp.<cluster_name>.<base_domain>.
に関する問い合わせに応答する必要があります。
このKubernetesとの違いでもあるDNS登録関連にて上記のドメインをどのように紐づける必要があるのか整理してみました。
環境情報
- openshift v4
- VMWare
参考
api/api-int/appはロードバランサのIP
apiに関してはOpenshiftのAPI Serverにアクセスする際に利用するIPアドレスとして利用します。
要はMasterノードとして見える仮想IPとなります。
# oc cluster-info Kubernetes master is running at https://api.hoge:6443
このIPの実体はロードバランサのIPで、例えばHAProxyを動かす場合はその仮想マシンのIPを指定し、以下のようにAPIServerに来たアクセスをMasterノードに流します。
frontend openshift-api-server bind *:6443 default_backend openshift-api-server ... backend openshift-api-server ... server master1 192.168.1.3:6443 check server master2 192.168.1.4:6443 check server master3 192.168.1.5:6443 check
.appsに関しても同様で、例えばダッシュボードを各端末から開く場合には以下URLとなるので
https://console-openshift-console.apps.hoge/dashboards
このような接続先がロードバランサ経由で割り振られる必要があります。
frontend ingress-https bind *:443 default_backend ingress-https ... backend ingress-https ... server worker1 192.168.1.6:443 check server worker2 192.168.1.7:443 check
etcd-0/etcd-1/etcd-2は各masterのIP
etcdはOpenshiftのPodとして展開されますが、各MasterノードのIPアドレスと同じもので起動しています。
# oc get pod -n openshift-etcd -o=wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES etcd-master1.hoge 4/4 Running .. 192.168.1.3 master1.hoge .. etcd-master2.hoge 4/4 Running .. 192.168.1.4 master2.hoge .. etcd-master3.hoge 4/4 Running .. 192.168.1.5 master3.hoge ..
よって同IPアドレスをdigでは返すようDNSに設定します。
$ dig master2.hoge +short 192.168.1.4 $ dig etcd-master2.hoge +short 192.168.1.4
_etcd-server-sslはサービスレコード
上記とは異なり、名前解決ではなくSRVレコードを登録します。
これによってetcdが2380番ポートで稼働していることを伝えることが可能です。下記のように優先度を全て同じにしている場合は、クライアント側で接続先をランダムに選定します。
# dig _etcd-server-ssl._tcp.hoge SRV +short 0 10 2380 etcd-1.hoge 0 10 2380 etcd-0.ocp4.icdslab.net. 0 10 2380 etcd-2.ocp4.icdslab.net.
終わりに
本記事がDNS設定の参考になれば幸いです。