6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DENSOAdvent Calendar 2020

Day 6

GKE を安心・安全に始める

Posted at

この記事は DENSOアドベントカレンダー2020 の 6日目の記事です。

約1年前に GKE を使い始めたのですが、専門用語や設定項目が難解且つ多く苦労しました。
勿論、デフォルト設定で手軽に始めることも出来ますが
セキュリティや課金の面で大丈夫とは思えませんでした・・・。

そこで、初めて GKE を触る時に少しでも意識すると、セキュリティや金額の面が安心・安全になると思う部分をまとめてみました。

はじめに

この記事では GCP や Kubernetes そのものについては書きませんので、他の素晴らしい記事を参照ください。
また、本番サービス提供には不適切な部分もありますので、最初の取っ掛かりとして見てもらえると助かります。

構築する環境

最終的に以下のような環境を構築します。
image.png

意識するポイントは以下です。

  • VPC Network
    • default を使わない
    • 限定公開の Google アクセスを ON
    • Firewall を設定
  • クラスタ操作用 GCE インスタンス (踏み台)
    • 無料枠の条件で作成する
    • 外部 IP を付けない
    • ブラウザ上から SSH 接続する
  • GKE
    • ゾーンクラスタにする
    • 踏み台と同じ VPC Network に作成する
    • 限定公開クラスタにする
    • Worker ノードはプリエンプティブル VM にする
    • Master ノードにはプライベートエンドポイントのみ付与する
  • おまけ
    • 踏み台、ノードをインターネットに接続する
    • DB 接続

コンセプトは**「無料枠の活用」「極力インターネットからアクセスさせない」**です。

VPC Network

Kubernetes クラスタと踏み台を作るためには VPC Network が必要です。

default を使わない

GCP でプロジェクトを作成すると、default という VPC Network が自動で作成されますが
22番ポートが全開放など、設定がかなり甘いです。
勿論、変更すれば済む話ですが、それよりも自分で VPN Network を作成した方が
他の設定確認・変更などの手間が無く、安心で早いです。

限界公開の Google アクセスを ON

VPC Network を作成する際、以下のオプションを ON にします。
これで VPC 内のインスタンスがインターネットにアクセス出来なくとも、Google のサービス (GCS など) が利用可能になります。
image.png

Firewall を設定

外部 IP を持たない踏み台へアクセスするためには、IAP を利用します。
こちら を参考に Firewall を設定します。
※ 使用中の IAM に IAP 使用権限が無ければ付与します。

クラスタ操作用 GCE インスタンス

クラスタを操作するためには Kubernetes の Masterノードと通信する必要がありますが、セキュリティ面からインターネット経由で通信するのは避けた方が良いと思っています。
そこで、GCP の内部ネットワークで Master ノードと通信をする踏み台を作成します。

無料枠の条件で作成する

以下の条件でインスタンスを作成し、課金額を抑えます。
image.png

外部 IP を付けない

インスタンス作成のネットワークインターフェース設定で、外部 IP を「なし」にしてインターネットからアクセス出来なくします。
image.png

ブラウザ上から SSH する

インスタンスが出来上がると、ブラウザの GCE インスタンス一覧画面から SSH できると思います。
また、外部 IP が「なし」になっていることを確認します。
image.png

GKE

ゾーンクラスタにする

1 つの請求先アカウントにつき、1 つのゾーンクラスタ管理料金が無料なので初めて GKE を使う場合はゾーンクラスタにするのが良いと思います。
また、1 つ目のクラスタでなかったとしてもゾーンクラスタの方が安いのでおススメです。

踏み台と同じ VPC に作成する

GKE の Master ノードと Worker ノードは VPC peering で接続されているので、踏み台がクラスタを操作するために、クラスタは踏み台と同じ VPC Network に作成します。(VPC Native クラスタにする)

限定公開クラスタにする

worker ノードにも外部 IP を付けないようにして、インターネットからアクセス出来ないようにします。GKE では限定公開クラスタを ON にすることで可能です。
image.png

Worker ノードはプリエンプティブル VM にする

踏み台で無料枠を使うので、Worker ノードは課金対象となります。
節約のためにスペックを下げるのは勿論ですが、更に節約するならプリエンプティブル VM にします。
24 時間以内に 必ず 1 回シャットダウンされますが、GKE の場合は Reconciliation によって自動復旧されるので、開発用などでは大きな問題にならないと思います。

Master ノードにはプライベートエンドポイントのみ付与する

クラスタ作成にて「限定公開クラスタを選択」且つ「外部 IP アドレスを使用したマスターへのアクセス」のチェックを外すと、Master ノードがインターネットからアクセス出来なくなります。
image.png
image.png

以上の設定で、安心・安全な GKE ライフを送れると思います。
もし、不適切な点などありましたら、ご指摘ください!

おまけ

これ以降は必須ではないものの、個人的に実施している項目です。

踏み台、ノードをインターネットに接続する

インターネットからアクセスはさせたくないものの、パッケージのアップデートなどでインターネットにアクセスしたいことがあるので、Cloud NAT を利用しています。

DB 接続

VPC Native クラスタであれば、Cloud SQL などの DB 系サービスと内部 IP で接続できますので Proxy は使っていません。
また、Kubernetes の secret はデフォルトで Base64 エンコードしかされないので、DB の接続情報はリポジトリに上げないように注意しています。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?