Kubernetes the hard way を初学者目線で解説する

#はじめに
30代未経験からエンジニアを目指して勉強中のYNと申します。
インフラ初学者の私ですが、`Kubernetes the hard way`を進めるにあたって、インフラに関する基本的な知識を体系的に学ぶことができました。
そこで、初学者目線での学びなどを本記事にまとめておきたいと思います。

#やったこと
githubの`kubenetes the hard way`を進めていきます。いくつか種類があるのですが、今回は[Mumshad Mannambethさんのもの](https://github.com/mmumshad/kubernetes-the-hard-way/tree/master/docs)に取り組みました。
これは下記の特徴があります。

* [Udemyのコース](https://www.udemy.com/share/101WmEBUoSdFhQQX4=/)で取り上げられている
* GCPを使わないオンプレ
* [Youtubeの解説動画](https://www.youtube.com/watch?v=uUupRagM7m0&list=PL2We04F3Y_41jYdadX55fdJplDvgNGENo&index=1)もある

#目次
[github](https://github.com/mmumshad/kubernetes-the-hard-way/tree/master/docs)の内容について#1から順に解説していきます。

#### #1 [全体像を理解する](https://qiita.com/theFirstPenguin/items/665e72c298d2eeca910f)
#### #2 [Vagrantでオンプレ環境構築](https://qiita.com/theFirstPenguin/items/eb7098c7a951fb12636e)
* [Prerequisites](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/01-prerequisites.md)
* [Provisioning Compute Resources](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/02-compute-resources.md)
* [Installing the Client Tools](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/03-client-tools.md)

#### #3 [サーバー/クライアント証明書の準備](https://qiita.com/theFirstPenguin/items/4d771068589f5dab6cc0)
* [Provisioning a CA and Generating TLS Certificates](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/04-certificate-authority.md)

#### #4 [クラスターコンポーネントの設定ファイルを生成する](https://qiita.com/theFirstPenguin/items/09076335cb46cbfc05e2)
* [Generating Kubernetes Configuration Files for Authentication](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/05-kubernetes-configuration-files.md)

#### #5 [etcdサーバーを設定する](https://qiita.com/theFirstPenguin/items/7e247021ecadb82ac8ec)
* [Bootstrapping the etcd Cluster](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/07-bootstrapping-etcd.md)

#### #6 [Control Plane コンポーネントを設定する](https://qiita.com/theFirstPenguin/items/3dc4a6aadd91908d4435)
* [Generating the Data Encryption Config and Key](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/06-data-encryption-keys.md)
* [Bootstrapping the Kubernetes Control Plane](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/08-bootstrapping-kubernetes-controllers.md)

#### #7 [Workerノードの設定](https://qiita.com/theFirstPenguin/items/e3279a34aea28c3c946f)
* [Bootstrapping the Kubernetes Worker Nodes](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/09-bootstrapping-kubernetes-workers.md)

#### #8 [WorkerノードのTLS証明書作成自動化](https://qiita.com/theFirstPenguin/items/f16488c48711572571df)
* [TLS Bootstrapping Worker Nodes](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/10-tls-bootstrapping-kubernetes-workers.md)

#### #9 [kubectlのリモートアクセス設定](https://qiita.com/theFirstPenguin/items/8acc282659207f315301)
* [Configuring kubectl for Remote Access](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/11-configuring-kubectl.md)

#### #10 [RBAC for Kubelet Authorization](https://qiita.com/theFirstPenguin/items/0a27dfc09898df3317d7)
* [RBAC for Kubelet Authorization](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/13-kube-apiserver-to-kubelet.md)

#### #11 [Podネットワークの構築](https://qiita.com/theFirstPenguin/items/3630d5894485b679e80d)
* [Provisioning Pod Network](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/12-configure-pod-networking.md)
* [Deploying the DNS Cluster Add-on](https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/docs/14-dns-addon.md)


#必要な事前知識
公式ドキュメントや解説記事なども初学者には分かりづらい部分が多いため、下記の内容は先に抑えておくべきと思います。
###Kubernetesの基本理解
チュートリアルなどを通して、Kubernetesオブジェクトの意味や、kubectlコマンドの使い方について分かっているのが前提です。

###Linuxの基本
コンテナ技術は全般的にLinuxの知識をベースにしており、最低限の理解は必要です。
「新しいLinuxの教科書」はとても勉強になりました。
![images.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/0b48f343-7e9e-953d-b7bc-6e8c0270ce51.jpeg)

###ネットワークの基礎
ネットワークについても基本的な理解は必要です。
特に「マスタリングTCP/IP入門編」の4章：IPプロトコルと、5章：IPに関する知識は参考になりました。
![61tPeRViVIL._AC_UY218_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/2aca388b-807f-bb30-e4af-fa4e62ec38fc.jpeg)

###SSL/TLSの基礎
Kubernetesクラスタ内のコンポーネント同士はTLSによってsecureな通信を確保しているため、TLSについての理解も必要です。
私は下記の記事などを参考にさせていただきました。

* [【図解】初心者も分かる”公開鍵/秘密鍵”の仕組み～公開鍵暗号方式の身近で具体的な利用例やメリット〜](https://milestone-of-se.nesuke.com/sv-advanced/digicert/public-private-key/)
* [【図解】素数とDiffie-Hellman鍵交換法 ~わかりやすい計算例とシーケンス,RFCや種類,アルゴリズムについて~](https://milestone-of-se.nesuke.com/nw-basic/tls/diffie-hellman-summary/)
* [【図解】よく分かるデジタル証明書(SSL証明書)の仕組み 〜https通信フロー,発行手順,CSR,自己署名(オレオレ)証明書,ルート証明書,中間証明書の必要性や扱いについて〜](https://milestone-of-se.nesuke.com/sv-advanced/digicert/digital-certification-summary/)
* [【図解】クライアント証明書(https,eap-tls)の仕組み ~シーケンス,クライアント認証,メリット~](https://milestone-of-se.nesuke.com/sv-advanced/digicert/client-cert/)
* [電子署名の基礎知識](https://qiita.com/angel_p_57/items/437ca6235defc938b97d)
* [2つの公開鍵暗号(公開鍵暗号の基礎知識)](https://qiita.com/angel_p_57/items/897bf94160be8d637585)
* [ちゃんと理解するSSL/TLS　前編](https://qiita.com/tmiki/items/a606f897b2b045b2aa6d)
* [KubernetesのTLS証明書](https://qiita.com/nsawa/items/4f11ac89707aad2c3d4a)
* [理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話](https://tkengo.github.io/blog/2015/12/01/https-details/)
* [SSL/TLSについてまとめ2018](https://qiita.com/Brutus/items/1015cc01d2e1eb82a526)
* [図解 X.509 証明書](https://qiita.com/TakahikoKawasaki/items/4c35ac38c52978805c69#41-openssl-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89)
* [kubucation](https://www.youtube.com/channel/UCiqnRXPAAk6iv2m47odUFzw)
* [httpsだからというだけで安全？調べたら怖くなってきたSSLの話!？](https://qiita.com/kuni-nakaji/items/5118b23bf2ea44fed96e)
* [今度こそopensslコマンドを理解して使いたい (2) 設定ファイル（openssl.cnf）を理解する](https://qiita.com/3244/items/8c7e6892efdb4e500be9#key-usage%E9%8D%B5%E3%81%AE%E7%94%A8%E9%80%94)
* [Kubernetesのセキュリティについて整理してみた件](https://qiita.com/mamomamo/items/1651b8f9e44938c0de15#etcd%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%95%E3%82%8C%E3%81%9F%E7%A7%98%E5%AF%86%E6%83%85%E5%A0%B1%E3%82%92%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%97%E3%82%88%E3%81%86)
* [認証（Authentication） と 承認（Authorization） の違い](https://garafu.blogspot.com/2013/11/authentication-authorization.html)

###systemdについて
Kubernetesとは直接関係ないのですが、今回扱うやりかたでは、Kubernetesのコンポーネントを`Pod`ではなく、`systemdのservice`として起動します。そのため、`systemdとは何か`が分かっていた方が良いです。私は下記記事などを参考にさせていただきました。

* [systemdによる自動起動](https://www.souichi.club/technology/systemd/)
* [Linux女子部　systemd徹底入門](https://www.slideshare.net/enakai/linux-27872553)
* [OS起動時にsystemdで行われていること](https://qiita.com/ledmonster/items/5f2e1633d4124cb978fe#multi-usertarget-%E3%81%AF%E4%BD%95%E3%82%92%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B)
* [Systemd メモ書き](https://qiita.com/a_yasui/items/f2d8b57aa616e523ede4#systemd)
* [systemd超入門](https://dev.classmethod.jp/articles/systemd-getting-started/)
* [Systemd でサーバを作る](https://qiita.com/propella/items/ed30de77bb0908fc5c05)