Private AKS clusterについて

五十嵐透氏:今回「Private Azure Kubernetes Service cluster を触ってみよう♪」という題名で発表します。よろしくお願いいたします。

(会場拍手)

ありがとうございます。

まず、本日のアジェンダと注意点から。注意点としましては、この情報は本日(3月25日時点)の情報となります。また、時間の関係上、Private AKS clusterのみの内容です。もし時間があれば、個人的に注目している新機能についてお話ししようかなと考えています。

逆に話さないこととしては、例えばAzureやKubernetes。もしくはAKSについての詳細な説明とかは割愛しようと思っています。あと、この発表自体は私個人の意見であって、所属する会社とか団体を代表する発言ではありません。そこのところ、ご了承をお願いいたします。

まず、自己紹介から。名前は五十嵐と申しまして、TwitterとかGitHubはこのアイコンでやっていますので、どこかで見かけたら話しかけてもらえるとうれしいです。仕事としては、クラウドエース株式会社でSREというロールで働いています。

趣味は、献血が好きで回数としては3桁超えています。社会に貢献したいなと思って献血しています。

AKSのセキュリティ問題

では本題に。「あなたのAKSのセキュリティは本当に大丈夫ですか?」というところで、少し話をしていきます。

みなさんもうすでにAKSを運用されてかなり長いこと経っているかなと思いますが、現場では「クラスタに対して接続できる拠点を制限しなさい」や「Podから外部インターネットというので通信の監視とか制御しなさい」みたいなことを言われているんではないでしょうか。

Kubernetes全体に言えることかなと思っているんですけれども、まだまだセキュリティの問題は、いまだに山積しているかなと思います。

Azureは、実はAKS自体のベスプラを出しています。これは何かといいますと、AKSの製品グループ、それからエンジニアリングチーム。そして、グローバルブラックベルトを含むフィールドチームが連携して作成しているベストプラクティスが、実は公開されています。

ここにセキュリティのところやネットワーク・ストレージ。それからランニングとか、いろいろ分野に分かれてまとまっているので、AKSに携わるエンジニアは必読かと思います。もちろん今日聞いている方々は、もう何十回も読んでいるかなと思います。誰もこっちを見てくれない(笑)。

そんな感じですね。実際にPrivate AKS cluster、今回の主軸というか主目的であるところのAKS clusterに入っていきます。

こちら何かといいますと、公式のドキュメントから抜粋してきていますが、AKSのControl PlaneおよびNode poolsがどうのこうのとか書いてあります。また、Control Planeの中のAPIサーバとそれからNode poolがネットワークトラフィックがプライベートネットワークにうんたらかんたらと実は書いてありまして。これを1回見たときに「うん、なるほど。わからん……」と思ったわけですよね。

これ、インフラ屋さんであれば、RFC1918というのはおそらく、わかると思います。けれども、じゃあその2個目、2行目は「いったい何言っているかわからん……」ってなりますね。

実際にこれをもうちょっとドキュメントで見ていくと、YouTubeに動画が上がっています。これAzure Power Lunchさんがやっているんですけど、おそらく公式かなと思うんですが、たしか1月30日ぐらいに公開された動画です。

Private AKS cluster自体は3月9日にGA(General Availability:正式版)になったので、まだプレビュー版のときに作られた動画です。けっこうわかりやすく説明しているので、見てもらえればと思います。

Private AKS clusterの作成

今までがドキュメントの話です。しかし、話だけでは、何もわからないので実際触ってみましょうということで、また公式からPrivate AKS clusterを作成するコマンドを引っ張ってきました。

見てわかるとおり、最初にリソースグループを作成しまして、次にAKS clusterの作成のコマンドが入っています。ここで見てもらいたいのはAKS cluster作成コマンドの一番下の行で、--enable-private-clusterというオプションがついています。Private AKS clusterを作る際に必要なのはこのオプションだけなので、とても簡単ですね。

ですが、3月24日時点では、これだけでは動きません。おそらくバグが原因かと思われます。なぜかといいますと、Azure CLIのリポジトリにバグとしてIssueが上がっているからです。

これが一度解決してマージされたんですけれども、昨日キャプチャーしたので7日前に「いやいや、まだこれバグとして残っているよ」というIssueが上がっています。これはPrivate AKS clusterだけの問題ではなくて、おそらくこのCLIのほうの問題かなと思います。

ですが、このIssueの中で暫定的な解決方法が一応書かれていますので、その修正版を加えたコマンドがこちらです。

修正点としては、自分でService Principalを作成する。そして、az aks create時にそのService Principalを指定する必要があります。

もうちょっと詳しく見ていくと、先ほども見たとおり、リソースグループを一番初めに作り、そのあとaz ad sp create-for-rbacコマンドを使ってService Principalを作成する。

その次にまたaz aks createをするんですけれども、これコマンド下のほうを見ていただけると、下3行目ですね。--enable-private-clusterをし、それからService Principalを指定し、そのあとクライアントシークレットを指定する必要があります。このコマンドおよびオプションを使うことによって現状では作成が可能です。

実際にPrivate AKS clusterを作ったものをAzure portalからは、こういうふうに確認できます。

それだとわからないので、通常のAKS clusterと、それから今回のPrivate AKS clusterを比較してみようかなと思います。向かって左がPrivate AKS clusterのノードプールが所属しているリソースグループのOverviewのキャプチャーです。向かって右手が通常のAKS clusterのノードプールが所属しているリソースグループのOverviewとなります。

ここで比べてほしいんですが、実はPrivate AKS clusterのほうがコンポーネントが3つ増えています。何かというと、Private DNS zone、Private endpointそしてNetwork interfaceです。

通常のAKS clusterに対してこの3つコンポーネントを増やすことによって、Private AKS clusterを作れますが、僕たちは先ほど書いたとおり、オプションを足すことだけで作れます。とても簡単ですね。

すごいシーンとしてますね、本当に(笑)。ここまでで、すごいダーッと駆け足で話しているんですが、この資料自体はTwitterとかでURLを放流していますので、できれば手元で詳細に見ていただければと思います。

clusterに接続する際の問題

では話に戻しますね。実際にここまでclusterを作りました。では、次にすべきことはclusterへの接続です。でないとPodをデプロイできません。

ただ、clusterにはすぐに接続できない問題があります。いつもの通常のAKS clusterだと、このあとaz loginをし、それからaz aks get-credentialsをすることで接続することが可能です。

ただ、今回ちょっと内容を端折ってしまいましたが、このPrivate AKS clusterは内部IPアドレスしかもっていません。そうすることによって、アクセスをコントロールすることを目的としています。セキュリティを担保することを目的としていますので、Public IP Addressがありません。なので、このclusterに対して接続できる口を作る必要があります。

その接続する口を作るのが、この「Private AKS clusterに接続する方法」として公式が用意しています。ここはちょっと時間の関係で割愛しますが、このような3つの方法です。

また注意点2個目としては、プレビューのときに実はこのPrivate AKS clusterって作れるリージョンに制限があります。しかし、今回GAによってリージョン制限がなくなったというか、制限があるというドキュメント自体がなくなりました。今回、私も東京で作成しましたし。

さらに、このPrivate AKS clusterって依存関係だったりとか制限事項がけっこうあります。なので、お手元で試してもらう際にはあまり問題はないと思いますが。例えば仕事で使われるとか、もしくは本当にサービスの本番環境で使おうかなと思っているときは、ちゃんと依存関係および制限事項をよく読んで使うようにしてください。

余談なんですけれども、実はGCPにもPrivate clusterと呼ばれる同じようなクラスタがあります。日本語でいうと「限定公開クラスタ」という名前で、詳しい話はしないんですけれども、これが2018年10月2日にGAしています。もう1年以上経っていますね。

今回、2020年3月9日にこのAKSのPrivate AKS clusterもGAしたので、やっとこれで追いついたかなと思っています。なので、ここから追いつけ追い越せみたいな感じで、みんなでPrivate AKS clusterを使って進化させていければいいなと思っています。

Spot Node PoolをAKS clusterで使う

ちょっと時間をもう少しいただけそうなので、私が個人的に注目している新機能だけサクッと紹介しますね。

ちょっとPrivate AKS clusterからはズレてしまいますが、Spot Node PoolをAKS clusterで使う機能があります。これ自体、今日の時点ではプレビュー機能のみなんですけれども。

これは何かというと、Spot VMを用いたVirtual Machine Scale SetをAKSのNode poolとして使用することが可能です。何言っているかわからないかもしれないんですけれども、詳しくはこの資料のところにリンクなど貼っておきましたので、後ほど見ていただければなと思います。

ただ、Spot VMやVirtual Machine Scale SetをSpot VMで使う機能。そもそもそのSpot VMを使ったVirtual Machine Scale SetをさらにAKS clusterのNode poolで使う機能も、すべてプレビューの段階です。

これ何がいいかというと、コスト削減につながります。なので、どんどん使っていって知見を貯めて、最終的には本番環境で使えればいいなと思っています。先ほどの話にもあったとおり、やっぱりコストって大事ですよね。……あれ?(笑)。まぁ、そんな感じですね。

駆け足になりましたが、まとめます。今回、Private AKS clusterがGAになりました。

(会場拍手)

ありがとうございます。主にセキュリティの要件として効果を発揮すると私は期待しています。また、依存関係とか制限事項があるので、うまく使いこなしていきましょう。これはもう使うしかないです。さらに、仮にバグがあっても、コミュニティの力でなんとかなる可能性はとても大きいです。なので、恐れずに使っていきましょう。

あとは、先ほど簡単に説明したとおり、新機能もAKSはどんどん出ていますので、みんなで積極的に使っていければいいなと思います。

そんな感じで、私の発表は以上です。ご清聴ありがとうございました。

(会場拍手)