初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）公開編パート１（NodePort）

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

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

# 引用や参考と今回の自分の勉強用の書籍の紹介
[技術評論社『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 のソースコードも使いながら学んで行きたいと思います。
***この章の勉強は本当に書籍の写経が主になるかもしれません・・・***


# 勉強開始

- アプリケーションを外部に公開する方法を学びます
  - NodePort を使って公開する
  - 外部 LoadBalancer を使って公開する
  - Ingress を使って公開する
 
今回は「**NodePort を使って公開する**」をやっていこうと思います

#### NodePort を使って公開する

- すべてのノードに同じポートが開放される
- ポートは 3000-32767 までが指定できる
- expose コマンドでも実施できる

範囲外だと下記のようにエラーが出るし、Service でもできることを一旦確認

```console
$ kubectl create service nodeport invalid-nodeport --tcp 8086 --node-port 32768
The Service "invalid-nodeport" is invalid: spec.ports[0].nodePort: Invalid value: 32768: provided port is not in the valid range. The range of valid ports is 30000-32767
```

#### マニュフェスト作成
```console:Serviceのマニュフェストを作る
$ kubectl expose --type NodePort --port 8065 deployment mattermost --dry-run -o yaml > mattermost-service.yaml
```

```diff:gitと自分で作成したマニュフェストの差分
--- a/ch3.6.1/manifests/mattermost/mattermost-service.yaml
+++ b/ch3.6.1/manifests/mattermost/mattermost-service.yaml
@@ -3,7 +3,7 @@ kind: Service
 metadata:
   creationTimestamp: null
   labels:
-    app: mattermost
+    run: mattermost # コマンドで作成すると run となる
   name: mattermost
 spec:
   ports:
@@ -11,7 +11,7 @@ spec:
     protocol: TCP
     targetPort: 8065
   selector:
-    app: mattermost
+    run: mattermost # コマンドで作成すると run となる
   type: NodePort
 status:
   loadBalancer: {}
```
> ここは、`app` で実施するように修正する

#### マニュフェストを適用する

```shell:マニュフェスト適用
$ kubectl apply -f mattermost-service.yaml
service/mattermost created
```

#### マニュフェストの適用を確認
```shell:適用されたマニュフェストの確認
$ kubectl get svc mattermost -o wide
NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE     SELECTOR
mattermost   NodePort   10.108.64.60   <none>        8065:32020/TCP   2m10s   app=mattermost
```

#### アクセス確認

以前は `localhost` で接続していたけど、名前で接続してみたいと思ったので、名前を確認

```conf:/etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section
```

#### 動作確認

<img width="822" alt="スクリーンショット 2020-04-25 16.54.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174596/3e6b0beb-4f7c-12ef-4e1f-1f979ba1f2d8.png">

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

写経しながら「外部 LoadBalancer を使って公開する」をやっていきます

# 最後に

[https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.6.1/manifests/mattermost](https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.6.1/manifests/mattermost)

今回は GitHub のマニュフェストを確認しながら行ったのですが・・・
自分のちから不足からかうまく動かなかったので、mattermost-preview のコンテナを使って
やってみました。

ここらへんのデバッグも自分でできるようになりたいと思いました。

# 今までの投稿

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)
18. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編 パート３](https://qiita.com/nodokaodayaka/items/9ad45aa52d76bcb844d7)
19. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編 パート４](https://qiita.com/nodokaodayaka/items/e6ef632223f9ac2cc99e)