初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編 パート３

# 背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。

その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。

# 引用や参考と今回の自分の勉強用の書籍の紹介
[技術評論社『Kubernetes実践入門』のサンプルコード](https://github.com/kubernetes-practical-guide/examples)
[Kubernetes実践入門 プロダクションレディなコンテナ＆アプリケーションの作り方](https://gihyo.jp/book/2019/978-4-297-10438-2)
![](http://image.gihyo.co.jp/assets/images/cover/2019/9784297104382.jpg)


## 実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
***この章の勉強は本当に書籍の写経が主になるかもしれません・・・***


# 勉強開始

- ExternalName を使って外部アプリケーションの名前を解決できることを確認します

#### 書籍では `-o wide` を使用して確認しているので違いを比較できるように一旦確認

- `SELECTOR` が表示されるかを確認します
> 前の章でも `Label` が重要なことが説明されていました

```shell:-o　wideなし
$ kubectl get svc,ep mattermost-db
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mattermost-db   ClusterIP   10.104.31.215   <none>        3306/TCP   16h

NAME                      ENDPOINTS         AGE
endpoints/mattermost-db   10.1.0.207:3306   16h
```

```shell:-o　wide付き
$ kubectl get svc,ep mattermost-db -o wide
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
service/mattermost-db   ClusterIP   10.104.31.215   <none>        3306/TCP   16h   run=db

NAME                      ENDPOINTS         AGE
endpoints/mattermost-db   10.1.0.207:3306   16h
```

#### Service を作成する

- ClusterIP が作成されてないことを確認
- Type が ExternalName になっていることを確認できます


```shell
$ kubectl create svc externalname ext-mattermost-db --external-name example.com
service/ext-mattermost-db created

$ kubectl get svc,ep ext-mattermost-db -o wide
NAME                        TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/ext-mattermost-db   ExternalName   <none>       example.com   <none>    35s   app=ext-mattermost-db

NAME                          ENDPOINTS   AGE
endpoints/ext-mattermost-db   <none>      35s
```

#### 作成した ext-mattermost-db / example.com の名前解決をしてみる

```console
$ kubectl run -it --rm test3 --image=k8spracticalguide/busybox:1.28 --restart=Never -- /bin/sh
If you don't see a command prompt, try pressing enter.
/ # nslookup ext-mattermost-db
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      ext-mattermost-db
Address 1: 2606:2800:220:1:248:1893:25c8:1946
Address 2: 93.184.216.34 # ext-mattermost-dbを名前解決した結果

/ # nslookup example.com
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      example.com
Address 1: 2606:2800:220:1:248:1893:25c8:1946
Address 2: 93.184.216.34 # example.comを名前解決した結果
```

## 次は 3.5.4 章をやっていきます。

ClusterIP を使わない Headless Service を学んで行きます

# 最後に

個人的には、下記のようなコマンドで確認ができるよ！と書籍で記載してもらっているのが非常に助かりました。
何度も、コマンドラインで確認するために下記のようなコマンドが出現すると自然とこういう確認ができるよね！
って思える様になります

`kubectl run -it --rm test3 --image=k8spracticalguide/busybox:1.28 --restart=Never -- /bin/sh`

今回も、前回同様ポータビリティという言葉がぴったりハマりました。（***ハマり*** はGood な意味です）
書籍の中で下記の言葉がすっごく印象的でした。引用させていただきます。

> このように、クラスタ外部のアプリケーションであっても、ExternalName を使用することで内部のアプリケーションと同じように Service 名でアクセスできます。もし将来的に、本番環境のデータベースも Kubernetes クラスタ上にデプロイすることになったとしても、Service 名を変えずに Service の種類だけを変更できるので、データベースを使用するアプリケーションに変更が及びません。

# 今までの投稿

1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Pod編](https://qiita.com/nodokaodayaka/items/04d8bc3c9c40443c1cd3)
2. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）NameSpace 編](https://qiita.com/nodokaodayaka/items/73bc1c939a665aaa4b7b)
3. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Label 編](https://qiita.com/nodokaodayaka/items/fd5284475fb1ba920559)
4. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ReplicaSet 編](https://qiita.com/nodokaodayaka/items/fc9f749f123649a2dbd9)
5. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Deployment 編](https://qiita.com/nodokaodayaka/items/2c9d4eefec40d4896126)
6.  [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Service 編](https://qiita.com/nodokaodayaka/items/28955bd813eaf512baf5)
7. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ConfigMap 編](https://qiita.com/nodokaodayaka/items/09c7627eaa913da78cf8)
8. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Secret 編](https://qiita.com/nodokaodayaka/items/8bc1a5963a7c7c177010)
9. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）操作編](https://qiita.com/nodokaodayaka/items/09cb848164e4a1855c83)
10. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編](https://qiita.com/nodokaodayaka/items/ae95e04b064b7600f6af) 
11. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート２](https://qiita.com/nodokaodayaka/items/fa87fd7a3733957e7aca) 
12. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（Label操作）](https://qiita.com/nodokaodayaka/items/8f1892eb1627d0717180)
13. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（OwnerReference 操作）](https://qiita.com/nodokaodayaka/items/b4ad326be41626da9b2e)
14. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト編](https://qiita.com/nodokaodayaka/items/8d212a5f1eeb2685f51c)
15. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト(ConfigMap)編](https://qiita.com/nodokaodayaka/items/7dd2f3885d8e957ffaad)
16. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編](https://qiita.com/nodokaodayaka/items/71c6f7d469cf2f277d3d)
17. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編 パート２](https://qiita.com/nodokaodayaka/items/2663e1931bd1ec007785)