Red Hat OpenShift on IBM Cloud(Classic Infrastructure): MZR環境なのに一部のZoneにアクセスが分散されていない状態の修正方法


1. はじめに

TOK02/TOK04/TOK5にまたがったworker nodeを作成したので、これで3拠点に処理は分散されるよね!

と思ったら、あれIngress subdomainを正引きしてみたら2拠点(128.168.xx.xxx(TOK04)166.192.xx.xxx(TOK05))にしか割り振られていない!

$ ibmcloud oc nlb-dns ls -c myrokscluster43
OK
Hostname                                                                                         IP(s)                                          Health Monitor   SSL Cert Status   SSL Cert Secret Name                                           Secret Namespace
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud   128.168.xx.xxx,128.168.xx.xxx,165.192.xx.xxx   enabled          created           myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000   openshift-ingress

$ dig A +noall +answer @1.1.1.1 myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 2 IN A 128.168.xx.xxx
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 2 IN A 165.192.xx.xxx
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 2 IN A 128.168.xx.xxx

確かにServiceを確認してみたらrouter-tok04とかrouter-tok05はあるのに、router-tok02が存在していない!何故?

$ oc get services -n openshift-ingress
NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
router-default            LoadBalancer   172.21.200.228   128.168.xx.xxx   80:31712/TCP,443:32543/TCP   64d
router-internal-default   ClusterIP      172.21.57.171    <none>           80/TCP,443/TCP,1936/TCP      64d
router-tok04              LoadBalancer   172.21.108.161   128.168.xx.xxx   80:31380/TCP,443:30034/TCP   64d
router-tok05              LoadBalancer   172.21.103.123   165.192.xx.xxx   80:32357/TCP,443:30142/TCP   64d

2. 原因

実はFAQのようです。サービスを作成する段階でまだクラスターがreadyになっていなかった場合など、タイミングによってはうまく作られないこともあるとのこと。

3. 修正方法

上記ドキュメントに従って手動でrouter-tok02を作成します。

router-tok02.yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: public
    service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: tok02
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    app: router
    ingresscontroller.operator.openshift.io/owning-ingresscontroller: default
    router: router-default
  name: router-tok02
  namespace: openshift-ingress
spec:
  externalTrafficPolicy: Cluster
  selector:
    ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
  sessionAffinity: None
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
$ oc apply -f router-tok02.yaml
service/router-tok02 created

$ oc get services -n openshift-ingress
NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                      AGE
router-default            LoadBalancer   172.21.200.228   128.168.xx.xxx    80:31712/TCP,443:32543/TCP   64d
router-internal-default   ClusterIP      172.21.57.171    <none>            80/TCP,443/TCP,1936/TCP      64d
router-tok02              LoadBalancer   172.21.205.181   161.202.xx.xxx    80:30370/TCP,443:32261/TCP   41s
router-tok04              LoadBalancer   172.21.108.161   128.168.xx.xxx    80:31380/TCP,443:30034/TCP   64d
router-tok05              LoadBalancer   172.21.103.123   165.192.xx.xxx    80:32357/TCP,443:30142/TCP   64d

router-tok02が作成されたので、このEXTERNAL-IPを該当のIngress domainに登録します。これによって、このドメインにおけるDNSでの割り振り対象に追加されるはずです。

$ ibmcloud oc nlb-dns add -c myrokscluster43 --ip 161.202.xx.xxx --nlb-host myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud
Adding IP(s) 161.202.xx.xxx to NLB host name myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud in cluster myrokscluster43 ...
OK

4. 確認

161.202.xx.xxx(TOK02), 128.168.xx.xxx(TOK04),165.192.xx.xxx(TOK05)の3つに分散されるようになりました。

負荷分散検証
$ ibmcloud oc nlb-dns ls -c myrokscluster43
OK
Hostname                                                                                         IP(s)                                                          Health Monitor   SSL Cert Status   SSL Cert Secret Name                                           Secret Namespace
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud   128.168.xx.xxx,128.168.xx.xxx,161.202.xx.xxx,165.192.xx.xxx   enabled          created           myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000   openshift-ingress

$ dig A +noall +answer @1.1.1.1 myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 30 IN A 128.168.xx.xxx
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 30 IN A 161.202.xx.xxx
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 30 IN A 128.168.xx.xxx
myrokscluster43-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.jp-tok.containers.appdomain.cloud. 30 IN A 165.192.xx.xxx