「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[Azure Kubernetes Service (AKS)]]
--[[Azure Subscriptionの管理@エンプラ]]
---[[FgCF (Financial-grade Cloud Fundamentals)]]~
・[[AppService閉域構成テクニカルリファレンス]]~
・AKSをセキュアに利用するためのテクニカルリファレンス

* 目次 [#ge667ff3]
#contents

*概要 [#q76f87a9]
-[[なんか、公開されていた>#q2387273]]ので聞いてみることにした。

-[[クラウド]]([[Azure]])の利用、[[コンテナ技術]]([[Docker>コンテナ技術#la264095]])を用いた開発、~
[[Open PaaS>AzureのPaaS#u5759581]]についての知識が必要になってくるので、内容は、難しいです。

**[[K8s>Azure Kubernetes Service (AKS)#x4a72daa]]のポイント [#vf319a19]

***採用 [#a3150de4]

-[[K8s>#vf319a19]]は難しい。

-以下の目的にて異合しているか?

--可搬性
---[[K8s>#vf319a19]]採用の目的は主に可搬性
---ただ、可搬性の大部分はコンテナで担保

--マイクロサービス
---アーキテクチャを構成し易い。
---Ingress - Service - Pod構成

***基本構成 [#gcac2445]
-制御プレーン
--Master APIを持っている
--Kubernetes CLI(kubectl)から操作する。
--AKSでの変更点は[[コチラ>#n7feb42c]]

-実行ノード
--VMSS : VM Scale Set~
--Ingress - Service - Pod構成~
※ Ingress - Serviceの詳細は[[コチラ>AzureのGW / LB的なモノ。#x9b75dd1]]。

---Pod~
・Dockerコンテナ~
・1podに複数コンテナを配置可能

---Service~
・L4ロードバランサ~
・サービス・メッシュを構成

---Ingress~
・L7ロードバランサ~
・必須ではない(オプショナル)

--AKSでの変更点は[[コチラ>#u41cdddc]]

***デプロイ方式 [#s7a54baa]
-Deploymentでラッピングされている。

-Podを物理ノードに配置する方式

--[[ReplicaSet>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes#w119c808]]方式~
通常は、空いている物理ノードに均等に割り当てる。

--[[DemonSet>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes#e7cc1702]]方式~
すべての、または特定の物理ノードに1つだけ配置する

***名前空間 [#h2084eb7]
-*.yamlで名前空間を定義すると、
-Kubernetes CLI(kubectl)から指定が必要になる。
-下位には、[[Service>#gcac2445]]と[[Deployment>#s7a54baa]]がある。

***kube configファイル [#p6cdc458]
-これは、Master APIにアクセスするためのクレデンシャル情報。

-AKSでは「[[az aks get-credentials>Azure Kubernetes Service (AKS)#l3698aeb]]」によって取得する。~
「--admin」オプションを付与
-- した場合、AKSクラスタ 管理者権限のクレデンシャルを取得
-- しない場合、AKSクラスタ ユーザ権限のクレデンシャルを取得

>※ K8sの権限については、[[コチラ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes#zf06c07c]]を参照。
>※ 「--admin」オプションを付与するには、Azure RBACロールの要件がある。

-以下の手順でも登場している。
--[[ダッシュボードによる状態確認>#ie2718ce]]
--[[Azure Kubernetes Service (AKS)>Azure Kubernetes Service (AKS)#l3698aeb]]
--[[Docker Desktop for Windows>Docker Desktop for Windows#k1b1bc9c]]

-kube configファイルの一般的な話は[[コチラ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes#ja6b145e]]。

***ダッシュボード [#df064deb]
ダッシュボードを追加して利用可能

**AKSのポイント [#bf07dd3a]
AKS : Azure Kubernetes Service

***[[制御プレーン>#gcac2445]] [#n7feb42c]
-構築不要 ≒ マネージド
-az コマンドで構築可能
-1つのリソース・グループとしてまとめて作成される。
-[[ノードプール>Azure Kubernetes Service (AKS)#yf99ad99]]の機能が拡張されている。

***[[実行ノード>#gcac2445]] [#u41cdddc]
-構築不要 ≒ マネージド
-az コマンドで構築可能
-1つのリソース・グループとしてまとめて作成される。
-[[ノードプール>Azure Kubernetes Service (AKS)#yf99ad99]]から実行ノードが割り当てられる。

***[[ACR>Azure Container Registry]] [#zbb28090]
[[ACR : Azure Container Registry>Azure Container Registry]]
-ユーザの作成したプライベートなコンテナを登録する。
-コンテナの置き場所(他のXKE / XKSにもコンテナ・レジストリはある)

***MCR [#u4a1c468]
MCR : Microsoft Container Registry
-AKSの基本動作に必要な[[実行ノード>#gcac2445]]用のコンテナを登録する。
-コンテナの置き場所(他のXKE / XKSにもコンテナ・レジストリはある)
***[[MCR>Microsoft Container Registry]] [#u4a1c468]

*詳細 [#j66a273a]

**AKS概要 [#v44909e0]

***内容 [#mafc8374]
-[[前述のポイント部分>#q76f87a9]]の説明

-基本的に
--[[Azure Cloud Shell]]を使用
--[[名前空間>#h2084eb7]]を利用

-[[チュートリアル>Azure Kubernetes Service (AKS)#f0c15710]]のvoting-appのエビデンスとほぼ同レベル。

***kubectlによる状態確認 [#o995f76c]
-一覧取得
 kubectl get <リソース種別> --namespace <名前空間>
-詳細取得
 kubectl describe <リソース種別> <ID> --namespace <名前空間>
-対象削除
 kubectl delete <リソース種別> <ID> --namespace <名前空間>

***ダッシュボードによる状態確認 [#ie2718ce]
-以下のコマンドを使用する。
--cluster-admin ロールに対して k8s ダッシュボードへのアクセス権限を
---付与
 kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
---(削除)
 kubectl delete clusterrolebinding kubernetes-dashboard -n kube-system

--ダッシュボードを開く。
 az aks browse --name $AKS_CLUSTER_NAME --resource-group $RG_AKS

-ダッシュボードが起動したら[[kube configファイル>#p6cdc458]]のトークンを入力する。

-[[プロキシを上げっぱなしにする必要がある>Docker Desktop for Windows#k1b1bc9c]]ので、
--[[Azure Cloud Shell]]を使用するとブラウザ・ウィンドウを専有する。
--CTRL+Cを実行して停止しないと、再度ダッシュボードを起動できなくなるとか...。

-ココのチュートリアルでは、[[名前空間>#h2084eb7]]を使用しているので、~
ダッシュボード左のペインから[[名前空間>#h2084eb7]]を選択して利用する。

-プロキシを停止するときは以下を行う。
--シェルを使用している場合、CTRL+Cを実行して停止する。
--[[Azure Cloud Shell]]のウィンドウを閉じてしまった場合など、
 ps -efl | grep 8001
 kill <pid>

-参考
--Web ダッシュボードで AKS クラスターを管理する | Microsoft Docs~
https://docs.microsoft.com/ja-jp/azure/aks/kubernetes-dashboard

***基本的トラブルシュート [#k8e497b8]
-Service が起動しない
--External IP (Public IP) が適切に付与できているかを確認
 kubectl get services --namespace <名前空間>
--サービスの作成が正しく行えたかどうかのログを確認
 kubectl describe services <サービス名> --namespace <名前空間>

-Pod が正しく動作しているかを確認したい

--Pod のログを確認
 kubectl logs <Pod名> --namespace nmssample

--Pod 上でコマンドを実行
 kubectl exec <Pod名> --namespace nmssample ls

--ポート・フォワードしてPod内部動作を確認~
例) localhost:8000 → コンテナ上の ポート 80
 kubectl port-forward <Pod名> --namespace nmssample 8000:80

-Pod が正しく動作しているのに Service の L4LB 経由でアプリが呼び出せない
--YAML ファイルの selector の記述が正しいかを確認~
※ selector は記述が間違っていてもエラーを出さない

***ツールやライブラリ [#p63c7102]
-[[Helm>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Helm%20Charts]]パッケージマネージャ
--Pod, Service, Ingress などの構成を一括で行うことができるパッケージマネージャ
--[[K8s>#vf319a19]]リソースのインストール / アンインストールを容易化できるのがメリット

-[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]]
--OSS の軽量 Web サーバで、リバースプロキシとしてよく利用される
--[[K8s>#vf319a19]]では、簡易な Ingress として利用されることが多い

-Istio サービス・メッシュ
--マイクロサービスの共通処理を担うサービス・メッシュの定番
--業務用のコンテナ + Istio のコンテナで各 Pod を構成して展開する形で利用

-Prometheus
--[[K8s>#vf319a19]]監視ツールの定番
--他の監視ツール(クラスタ基盤の監視ツール)と~
組み合わせて利用されることが多い

-Grafana
--グラフィカルなダッシュボードの表示ツールの定番
--Prometheus などと組み合わせて利用される

-その他
--Useful Tool for k8s managing and monitoring~
https://github.com/yoshioterada/k8s-Azure-Container-Service-AKS--on-Azure/blob/master/Kubernetes-Workshop8.md

**構成のポイント [#bdd009e5]
≒プライベート化のポイント~

(動画も3時間半と長く、内容も濃いので、~
[[Azure]]側も理解しながらだと、一気通貫に1週間位かかる)

***物理インフラ構成 [#s3bedcc6]
-実際の物理インフラは、

--K8s~
[[K8sのポイント>#vf319a19]]

--Azure~
[[AKSのポイント>#bf07dd3a]]

>に分かれる。

-フルコンテナ化~
現時点では難しい。

--特に、DBサーバが難しい
--監視サーバは基盤外が良いケースが多い。

-Kubernetes CLI(kubectl)か、[[Azure CLI]]か。

--Kubernetes CLI(kubectl)
---Ingress - Service - Pod構成
---ダッシュボード

--[[Azure CLI]]
---コンテナ・レジストリ
---マネージド・サービス(PaaS)版のDB
---その他~
・監視サーバ~
・機密情報保管庫(Key Vault)

***ネットワーク構成 [#h6e5b109]
-ネットワーク分離

--[[CNI方式>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E6%A8%99%E6%BA%96%E4%BB%95%E6%A7%98#j757b1a3]]~
≒PodのIPアドレスの付与の方式

---kubenet方式~
仮想IPを使用して、NAT変換する。

---Azure CNI方式(&color(red){推奨};)~
PodのIPに[[VNET>Azureの仮想ネットワーク]]のIPが使用されるが、~
Azureの仮想ノードやサービスを利用可能。

--内部設置

---[[VDC>Azure Virtual Data Center]]内部に配置~
大量のプライベートIPアドレスを使用してしまう。

---[[VNET>Azureの仮想ネットワーク]]分離(&color(red){推奨};)~
[[Azure Private Link]]でオンプレ接続する。~
・すると、プライベートIPアドレスを消費しない。~
・また、テスト面の構築などの場合にも便利。~
・[[VNET>Azureの仮想ネットワーク]]からオンプレに入れないのでセキュア

-[[制御プレーン>#gcac2445]]のプライベート化

--Master APIのプライベート化

---[[プライベートAKSクラスタ>Azure Kubernetes Service (AKS)#m0c88b4a]]という機能を使用して、~
 Master APIを[[VNET>Azureの仮想ネットワーク]]に引き込み、~
 [[VNET>Azureの仮想ネットワーク]]からしかアクセスできなくできる。

---しかし、~
・[[ノードプール>Azure Kubernetes Service (AKS)#yf99ad99]]を[[VNET>Azureの仮想ネットワーク]]内に配置するという話ではない。~
 (ただし、[[デモ>AKSをセキュアに利用する構築デモ]]では既存の[[VNET>Azureの仮想ネットワーク]]に配置している)~
・また、ARM APIがパブリックなので、~
 Master APIだけプライベートではアンバランス。

--既存のアクセス制限機能を使用(&color(red){推奨};)

---ARM API:~
[[AzADによる条件付きアクセス機能を構成する。>Azure Kubernetes Service (AKS)#t071fa52]]

---Master API:~
[[IPアドレスによるアクセス制限機能>プライベートAKSクラスタを作成する。#p72cc023]]

-[[ノードプール>Azure Kubernetes Service (AKS)#yf99ad99]]の経路制限

--入力経路の制限 (Ingress Lockdown)~
・[[制御プレーン>#gcac2445]]からノードプール~
 不要(出力方向で通信するため)~
・保守端末からノードプール~
 ・インターネット:[[Azure Bastion]]~
 ・オンプレ:[[Azure Private Link]]~
・エンドユーザーからアプリケーション~
 コチラは長くなるので、[[コチラ>AzureのGW / LB的なモノ。#if7287ad]]を参照。

--出力経路の制限 (Egress Lockdown)~
・[[プロキシ的なモノ>Azureのプロキシ的なモノ。]]で制限。~
 ・[[基本的に、Azure Firewallを利用する。>Azure Kubernetes Service (AKS)#b5d292ee]]~
 ・以下のコマンドでデフォゲ(ELB)を作成しない。~
    az aks create ... --outbound-type userDefinedRoutiong
・必要な通信は以下。~
 ・Master API~
 ・セキュリティ更新~
 ・[[MCR>#u4a1c468]]:サービス全体が基本的に安全~
 ・[[ACR:ユーザ・テナント毎の制限が必要。>Azure Kubernetes Service (AKS)#qd7391d0]]~
 ・各種サービス([[Azure SQL Databaseの制限>Azure Kubernetes Service (AKS)#d14d6d94]]など)~

-参考
--[[オンプレ延伸>FgCF (Financial-grade Cloud Fundamentals)#aed3c834]]環境
--[[OA-LANとAzureのVNETの分離]]。

--Service CIDR、Docker Bridge CIDR
---Service CIDR
---Docker Bridge CIDR

--DockerとKubernetesのPodのネットワーキングについてまとめました - baron tech blog~
https://foobaron.hatenablog.com/entry/k8s-pod-networking

--Microsoft Docs~
Azure Kubernetes Service (AKS) のドキュメント
---概念 - Azure Kubernetes サービス (AKS) におけるネットワーク~
https://docs.microsoft.com/ja-jp/azure/aks/concepts-network
---操作方法ガイド > ネットワークを構成する~
https://docs.microsoft.com/ja-jp/azure/aks/

***認証・認可 [#h7815383]

-インフラ
--Azureポータル, Azure CLI (ARM API)の認証・認可
---既定で、[[Azure Active Directory]]の認証を要する。
---追加で、[[前述>#h6e5b109]]の、~
・[[Azure Active Directory]]による条件付きアクセス機能を構成する。~
・若しくは、IPアドレス制限 / プライベート化を構成する。

--[[制御プレーン>#gcac2445]]の実行アカウント
---[[SPN方式>AKSクラスタ作成・操作に必要な権限#c8ea8683]]
---[[Managed ID方式>AKSクラスタ作成・操作に必要な権限#i3b0bd60]]

--コンテナ・レジストリからのイメージ取得権限
---[[ACR>#zbb28090]]統合 → [[コチラ>AKSクラスタ作成・操作に必要な権限#z3a90ed1]]
---3RDパーティのコンテナ・レジストリ~
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

-中間(境界線が引き難い)
--K8sダッシュボード, Kubernetes CLI(kubectl)
---「[[az aks get-credentials>Azure Kubernetes Service (AKS)#l3698aeb]]」で[[kube configファイル>#p6cdc458]]を取得
---必要に応じて、以下の持ち出し対策を行う。~
・[[Azure Active Directory]]認証と統合する。→ [[コチラ>Azure Kubernetes Service (AKS)#l1d8ceab]]~
・[[前述>#h6e5b109]]のMaster APIのIPアドレス制限 / プライベート化~
※ IPアドレス制限 / プライベート化で十分という説もある。

-アプリ
--[[AKSユーザ・アプリからのリソース・アクセス>Azure Kubernetes Service (AKS)#qde0f8b9]]
---Secret管理
---[[Managed ID>Azure Managed ID]]

***基盤保守 [#rd67a39f]
-AKSの更新
--AKS基盤は自動~
(マネージド・サービス)
---[[制御プレーン>#gcac2445]]
---[[ノードプール(VMSS)>#gcac2445]]

--K8sのバージョンアップは手動~
(AKSとK8sのバージョンの関係が重要)

-ノードの更新
--[[実行ノード>#gcac2445]](Linuxノード、Windowsノード)に対して行う。
--OSのセキュリティ・アップデート(Ubuntu)は日次で自動更新される。
--Kuredと言うOSSをK8sにインストールすると、再起動をしてくれる。
--[[ノードプール(VMSS)>#gcac2445]]のローリング・アップデート機能はAKSでは非サポート。

-Podの更新
--コンテナ・レジストリ内のイメージ
--イメージ内のアプリ
---アプリ自体
---ライブラリ

>※ 詳細は[[コチラ>Azure Kubernetes Service (AKS)#e755b2b0]]

***開発~デプロイ [#ye9b2134]
-一般的な DevOps ワークフロー
-金融系等では「PoC → 開発 → 本番」環境分離(セキュリティ境界)を考慮

>※ 詳細は[[コチラ>Azure Kubernetes Service (AKS)#ja9f4fdf]]

**[[構築デモ>AKSをセキュアに利用する構築デモ]] [#x9c8bdc8]
-[[構成のポイント>#bdd009e5]]を再咀嚼しつつ、デモの内容を理解する感じ。
-[[構成のポイント>#bdd009e5]]の理解が薄いと、何してるのか解らなくなるw。

*参考 [#q2387273]

**Microsoft Docs [#tbc75de6]
-概念 - Azure Kubernetes Service (AKS) におけるセキュリティ~
https://docs.microsoft.com/ja-jp/azure/aks/concepts-security

***ベスト プラクティス [#r9bfd9d5]
-Azure Kubernetes Service (AKS) に関するベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/best-practices

--ネットワークとストレージ
---ネットワーク リソースのベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-network
---ストレージとバックアップに関するベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-storage

--マルチテナント
---クラスター分離に関するベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-cluster-isolation
---ID 管理のベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-identity

--セキュリティ
---クラスター セキュリティに関するベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-cluster-security
---コンテナー イメージ管理のベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-container-image-management

--BCP、BCM
---AKS での事業継続とディザスター リカバリーに関するベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-multi-region

--開発者向け
---リソース管理のベストプラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/developer-best-practices-resource-management
---ポッド セキュリティのベスト プラクティス~
https://docs.microsoft.com/ja-jp/azure/aks/developer-best-practices-pod-security

**nakama [#icc83da1]
-https://twitter.com/nakama00/status/1256070593025196032
--https://www.facebook.com/nobuyuki.akama.5/posts/2947887578638196

>※ YouTubeで限定公開とあるケド、Facebookで公開なのって、実質「公開」って事で良いんだよね?

***技術概要 [#q8c070d7]
-YouTube~
https://www.youtube.com/watch?v=PrE3c1ZvL4s
-video~
https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(video1).zip
-ppt~
https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(ppt).zip

***構築の要点 [#nfcef196]
-YouTube~
https://www.youtube.com/watch?v=PL5MtSVzdI4
-video~
https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(video2).zip

***リファレンスアーキテクチャ [#b56bd3dc]
-YouTube~
https://www.youtube.com/watch?v=-Mawv15LhQc
-video~
https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(video3).zip

----
Tags: [[:クラウド]], [[:コンテナ]], [[:Azure]], [[:AKS]], [[:IaC]], [[:セキュリティ]], [[:通信技術]], [[:セキュリティ]], [[:認証基盤]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS