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

#1. はじめに

TOK02/TOK04/TOK5にまたがったworker nodeを作成したので、これで３拠点に処理は分散されるよね！
<img width="1273" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4abef412-dd0e-b43c-365b-02728cde5f36.png">

と思ったら、あれIngress subdomainを正引きしてみたら２拠点（`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](https://cloud.ibm.com/docs/openshift?topic=openshift-cs_troubleshoot_debug_ingress&locale=en#cs_subnet_limit_43)のようです。サービスを作成する段階でまだクラスターがreadyになっていなかった場合など、タイミングによってはうまく作られないこともあるとのこと。

#3. 修正方法
上記ドキュメントに従って手動でrouter-tok02を作成します。

```yaml: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つに分散されるようになりました。

```shell-session:負荷分散検証
$ 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
```