[IBMCloud] DNS Services構成と名前解決(IKS/VSI)

## 目的
IBMCloudのVPC環境においてDNS Servicesを用いた名前解決のテストを実施
DNS Servicesで設定したAレコードが、IKSおよびVSIより名前解決ができるか確認する

## DNS Servicesの設定
IBMCloudのDocsはこちら
https://cloud.ibm.com/docs/dns-svcs?topic=dns-svcs-getting-started&locale=ja

### Step1. DNS Servicesインスタンスを作成する
IBMCloud consoleにログインし、上部の検索メニューより**
検索から出てきた**DNS Services**を選択
![貼り付けた画像_2024_06_19_17_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/3b8d395a-4250-1018-fcef-7de5fd08c0d0.png)
DNS**を検索

リソースの構成：任意の名前を設定
リソースグループの選択：サービスをデプロイするリソースグループを選択
最後に使用条件に同意し、**作成**実施
![貼り付けた画像_2024_06_19_17_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/8bf56bac-eb1c-1c78-31c6-60c63472bc0f.png)

### Step2. DNSゾーンを追加する
**ゾーン** -> **ゾーンの作成**を選択
![貼り付けた画像_2024_06_19_17_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/7ba08f8b-c6c8-5873-6aeb-ba002b083594.png)

名前：作成したいゾーン名を入力
最後に、**ゾーンの作成**を選択
![貼り付けた画像_2024_06_19_17_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/09f01dc4-71a5-63e1-db49-605b67988ecd.png)

作成に成功するとこの画面が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/594f5974-ca16-1bcc-38bb-395cf3d0b63e.png)

### Step3. DNSリソース・レコードを追加する
**ゾーン** -> 作成した**DNSゾーン名**を選択
![貼り付けた画像_2024_06_19_17_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/b5418174-7876-ce36-4cff-809179974443.png)

**レコード・アクションの選択**を選択し、**レコードの追加**を選択
![貼り付けた画像_2024_06_19_17_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/6a728c6c-355a-d0a2-bf1e-f79c8ec2a77e.png)

Aレコードを追加する例
名前：Aレコードの名前を記載
Ipv4アドレス:**[Aレコード].testdomain.com**で解決したいIPアドレスを記載
![貼り付けた画像_2024_06_19_17_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/1c55c950-7b5c-b98c-8ae3-a0d0f10b63a5.png)

### Step4. DNSゾーンへの許可ネットワークとしてのVPCの追加
作成したDNS Servicesに対してDNSクエリを許可するネットワークを指定する
**ゾーン** -> **許可されたネットワーク** -> **ネットワークの追加**を選択
![貼り付けた画像_2024_06_19_22_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/71349de3-c69e-0832-5759-2232cd369fb4.png)

許可対象のVPCがあるリージョンを選択し、クエリを許可したいVPCを選択する
最後に**ネットワークの追加**を選択
![貼り付けた画像_2024_06_19_22_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/ab54a34d-b4ee-c4eb-71dc-e5fb57ce1be9.png)

正しく追加された場合、状態が<font color="red">アクティブ</font>となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/5e0b8647-6f7d-f779-e53d-4871785811b9.png)
![貼り付けた画像_2024_06_19_22_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/e3b23d7c-96d0-f816-ecf5-5f00ade397a5.png)


ここまでの操作で、クエリを許可したVPCからDNS ServicesへのDNSクエリが実行でき
かつ名前解決ができる状態となる。

## 動作確認
### VPC上のVSIからのテスト
VPCインフラストラクチャに作成したVSIのLinuxサーバよりテストを実施

#### dig
```
# dig www.testdomain.com

; <<>> DiG 9.16.23-RH <<>> www.testdomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33273
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.testdomain.com.		IN	A

;; ANSWER SECTION:
www.testdomain.com.	900	IN	A	99.99.99.99

;; Query time: 3 msec
;; SERVER: 161.26.0.7#53(161.26.0.7)
;; WHEN: Wed Jun 19 13:39:08 UTC 2024
;; MSG SIZE  rcvd: 70
```

#### nslookup
```
# nslookup www.testdomain.com
Server:		161.26.0.7
Address:	161.26.0.7#53

Non-authoritative answer:
Name:	www.testdomain.com
Address: 99.99.99.99
```

161.26.0.7はVSIに設定されているデフォルトのDNSサーバ
```
# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
nameserver 161.26.0.7
nameserver 161.26.0.8
```

### VPC上のIKS(kubernetes)からのテスト
PODから名前解決をテスト
```
% kubectl run dnstest --rm --tty -i --image=busybox --restart=Never -- sh -c 'nslookup www.testdomain.com; echo $?;'
Server:		172.21.0.10
Address:	172.21.0.10:53

Non-authoritative answer:

Non-authoritative answer:
Name:	www.testdomain.com
Address: 99.99.99.99
```

172.21.0.10はIKS上のCoreDNS(kube-dns)サービス
```
% kubectl get service kube-dns -n kube-system -o wide | grep kube-dns
kube-dns   ClusterIP   172.21.0.10   <none>        53/UDP,53/TCP,9153/TCP   72d   k8s-app=kube-dns
```