パブリッククラウド上でもkubeadm使ってカスタマイズ可能なKubernetesを欲しい方向けの記事

TL;DR

Azureのサブスクリプションを持っている方向けに、KubernetesをKubeadmを使ってインストールする手順を記載。(非AKS)

出来上がるもの

Azure上にUbuntuのVMインスタンスを3つ用意し、それぞれKubernetes Master×1、Kubernetes Worker×2として構成。

本環境で実施したバージョン

  • OS: Ubuntu 18.04.5 LTS
  • Container Runtime: Containerd 1.3.3–0ubuntu1~18.04.4
  • CNI: Calico v3.11
  • Kubernetes: v1.20.3

前準備

前提事項としてaz コマンドの実行元はwsl2 Ubuntuであること、およびAzureの …


Microsoft謹製の画面分割ツールFancyZonesを使う

TL;DR

Microsoft謹製の画面分割ツールFancyZonesが結構便利だったので紹介します。

背景

1年以上在宅している人々は大概デカい外付けディスプレイを導入していることだろう。ただディスプレイをうまいこと使いこなせず、私の場合はだいたいこんな感じで散らかっていってしまうことがほとんどだった。Windows+方向キーで四方に…というのは知っていてもチャットツールやターミナルは縦長にしたいし今編集しているブラウザは正面に…という感じ。

Image for post
Image for post

そんな時友人が購入したLGのディスプレイには分割のための専用ソフトウェアがついていることを自慢された。悔しくて似たようなものを探していたらMS謹製のFancyZonesたるものがあるじゃないか。ということで入れて使っています。

導入の仕方

こちらの公式GitHubページから最新版をインストール。PowerToysというツールの上で今回のFancyZonesが動く感じになる。なのでPowerToysをインストール。

https://github.com/microsoft/PowerToys/releases


OpenShiftのCluster Operatorのトラブルシューティング方法、Redsocks透過プロキシを少しだけ含む

TL;DR

最初に言っておくとこれは私のLab環境で起きたことの対処であるため汎用性・再現性は非常に低い。OpenShift Insight OperatorがDegraded Statusになる場合の対処。

どうやって気づくか

  • OpenShiftのAdministrator Webコンソール(Administration->Cluster Settings)でUpdate StatusがFallingになる
    ※以下は正常時の画面。異常時はこの表示が赤くなる
Image for post
Image for post
  • oc get co の結果でDEGRADED: True と表示される
$ oc get co
NAME …

vSphere with Tanzu on NSX-Tの環境をNested ESXiでハマりながら作った記録。

TL;DR

過去三回にわたり概要NSX-T編ワークロード管理有効化編を紹介。今回はvSphere PodおよびTanzu Kubernetes Clusterまわりでハマったことを書いていきます。

ハマったこと⑤SupervisorControlPlaneVMのデプロイには成功したのにkubectlのダウンロードページにアクセスできない

SupervisorControlPlaneVMのデプロイ後、Tanzu用kubectlプラグインが含まれたkubectlのダウンロードページにアクセスすることが可能になる。
アクセスできない原因は結果から言うと凡ミスで、自動で払い出されるIPアドレスを既に別のマシンで使っていたためにアクセスができなかっただけ。ワークロード管理有効化時に指定するWorkload NetworkIngress …


vSphere with Tanzu on NSX-Tの環境をNested ESXiでハマりながら作った記録。

TL;DR

過去二回にわたり概要NSX-T編を紹介。前回ハマったこと①を紹介したので今回は②以降の今回は実際にハマったポイントをリストしていきます。今回はワークロード管理有効化編。

ハマったこと②vSphere クラスターでLifeCycle Managerを有効にしているとワークロード管理が有効化できない

Image for post
Image for post
ワークロード管理の有効化画面

NSX-Tのセットアップが完了し、いよいよTanzuっぽい部分(SupervisorControlPlaneVMのデプロイ)をいざ進めようとすると、クラスターの検証の部分で以下のエラー。

Cluster domain-c8 is managed by vSphere Lifecycle Manager. It does not support Workload Management with NSX


vSphere with Tanzu on NSX-Tの環境をNested ESXiでハマりながら作った記録(NSX-T編)

TL;DR

このシリーズの概要などは前回の投稿に記載。今回は具体的なハマりどころ、特に一番時間をかけたNSX-T部分について。

ハマったこと①前提知識がなさすぎる故に最終構成がイメージできない

とりあえず構築手順を進めていても前提知識がないためにサンプルのネットワーク構成をどう自分の環境に当てはめていいのか最初はまったくわからなかった。マニュアルちゃんと読め(自戒)。これから始める方は最低限以下を確認してなんとなくでもイメージを持った上で始めるとよいと思う。

vSphere with Tanzu で必要なネットワーク

こちらに色々書いてある。要はvSphere NetworkとNSX-Tのどちらかを利用できる。今回はNSX-Tを前提に環境を組む。

vSphere with Tanzu × NSX-Tで必要なネットワーク

こちらはNSX-T構成におけるトポロジーの説明。今回はリソース …


vSphere with Tanzu on NSX-Tの環境をNested ESXiでハマりながら作った記録

TL;DR

勤務している会社はなんだかんだVMwareと仲が良く、お客様からもVMware製品のインテグレーションに強いというイメージを持っていただいている事が多いので、Tanzu製品の引き合いも最近多くいただく。そんな中自分自身にもそろそろTanzuの波が押し寄せてきたので検証環境でもサクッとつくったろかと思ったところ色々とハマったのでその格闘の記録をここに記しておこうと思う。

構築したかったもの

現在別用途で使っている1台のESXiサーバを使ってNSX-TおよびvSphere with Tanzuを動かしたい。先人の勧めによりNested ESXi環境でやることにした。私の場合は1台のサーバにESXiをインストールし、その上にNested ESXiサーバを構築する。
(青色の箱はもとから存在していたもの、黄色の箱がTanzu構築にあたり新たに作ったもの)

Image for post
Image for post

本ブログの目的

大いに参考にしているのはGo Watanabeさんのブログ。これは自宅vSphere with Tanzu勢のバイブルと言っても良い。基本的にこちらのブログを参考に構築をトライした結果になるが、自分の環境との差異をどう考えるか、ありがちなミスなどについて書いていくのが本ブログの目的。

本環境のバージョン/スペックなど


合格までのみちのり

TL;DR

記念すべき2020年12月16日、2度目の試験でCKS試験に合格した。合格ラインは67%、一度目の試験は45%。二度目の試験は78%でクリアした。試験の準備、特に試験のフィードバックや試験に対する準備などを共有していこうと思う。

Image for post
Image for post

試験のフォーマット

CKA/CKADと同じくリモート/ハンズオン/Webターミナル/試験監督にカメラ越しに見守られながらの試験ということは変わらない。
ただ今回の試験でこれまでのCKA/CKADなどと違うなと感じたのは以下の点。

  • 英語のみ、日本語化未対応(2020/12/16時点)
  • 参照可能なドキュメントにTrivySysdigFalcoAppArmorなどが増えてる。試験用、Kubernetes公式用とあわせて合計3つタブが開けるようになった。
  • source <(kubectl completion bash), alias k=kubectlなどはあらかじめ~/.bashrc設定されている

今回は自宅から受験。ドアが閉め切れる部屋であれば多少の家具などがあっても大丈夫な模様(私の部屋の場合は子供用ベッドやおもちゃタンスみたいなのがあったけど特に問題なし)。公式のインストラクションはこちら

試験準備に役立つサイト

書籍

1回目の試験時に購入。この本がないと今の私はいません。というくらい名著。広範囲なトピックに対して要点を非常によくまとめてくれていてテーマの割りにさらっと読めるしあとで細かいところ読み返しても学びがある。「Kubernetesはさわったけどセキュリティ?」って人はここから始めると良いと思う。

分量が多くなくさほど時間がかからずに読める。カリキュラムをほどよくカバーしていてかつ実務的な対策(Yamlファイルの内容やコマンド等)も載っている。公式サイトの補足的に使ったりすると理解が深まる。
Aquasecurityのサイト経由でユーザ情報等を提供すると無料で読めるようである。
https://info.aquasec.com/kubernetes-security

試験までにやったこと

  • まず書籍を一通り読んでそもそもKubernetesのセキュリティってなんぞみたいなところの概要把握をした。
  • 試験勉強用のクラスタを用意して、公式のチュートリアルをなぞりながら実際の設定方法などを確認した。
  • 上記のUdemyや書籍をやりながら先の環境で確認を繰り返しやった。
  • Udemyのシミュレータを前日にやった後、できなかったとこの解説を試験前まで確認した。

試験勉強用のクラスタ

何の変哲もないシングルマスターの1台クラスタだけど一応書いておく。APIサーバの設定を色々と変えることが多いのでマネージドのK8sクラスタよりもkubeadmで作ったクラスタの方が良いと思う。個人的には試験勉強に際してはマスターの冗長化は不要かと。

$ k get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kubeadm-k8s-1 Ready master 65d v1.19.2 10.0.1.132 <none> Ubuntu 18.04.2 LTS 4.15.0-123-generic containerd://1.3.7

試験中に気を付けた方がいいこと

  • 自宅から受けたからなのか試験監督の問題なのか、試験前のチェック(PCやカメラで部屋をチェックするなど)にだいぶ時間がかかった。ログインから実際の試験開始(Start Examをクリックするまで)25分くらいかかった。試験時間は当然Start Examしてからカウントされるので問題ないが、前後の時間には余裕をもって臨んだ方が良い。
  • 途中残り30分くらいのところで何等かの理由でターミナルが反応しなくなったため、Reset Terminal的なリンクをクリックしたところ画面がに“Start Exam”が表示され顔面蒼白した。がデータはちゃんと残っていたので慌てなくても大丈夫。
  • 試験のUIが多分今年の夏過ぎくらいから変わっている。大した問題にはならないが不安な人はこちらを見ておくとよいかも。
  • CKS特有の話ではないがWebターミナルに慣れておくこと。(公式ページ参照)特にCopy/Pasteは試験中よく使うので使用法を正しく把握しておくのが良い。私の場合公式に載っている以外でもCnt+Shift+Vで貼り付けができたが、Cnt+Shift+CではコピーができずChromeのデバッグモードが立ち上がってしまい何度か時間をロスしてしまった。
  • 2020年12月時点試験環境はv1.19だが公式ドキュメントを普通に開くと最新のv1.20が開く。たまにAPIバージョン上がっているリソースなどがあるので注意。(試験環境はそのうちアップグレードされる見込み)

最後に

低レイヤの話も含めて学ぶことができたこと、Kubernetesのセキュリティ対策について一定の基準を持てるようになったことが試験を通じて得た大事なことだなと実感している。またセキュリティは終わりのないテーマなのでオッサンのライフワークにぴったりです。ちょっと早いけど2021年も引き続きやっていく所存。


AppArmorを使ってコンテナが実行するシステムコールを制限する

What is AppArmor

AppArmorはLinuxカーネルセキュリティモジュールであり、標準のアクセス許可(Linuxユーザおよびグループベースのアクセス許可)に加えてプログラムのアクセスを限られたリソースに制限するための機能。カーネルが管理するリソース(ファイルシステム、プロセス間通信、メモリ等の記憶領域、ネットワーク、デバイスドライバ等)を特定のプログラムまたはコンテナに対してプロファイルを通じてアクセス許可の制御を行う。

プロファイルのモードは Enforcing (許可されていないリソースへのアクセスをブロックする)、 Complain (許可されていないリソースへのアクセスの報告)のどちらかで動作させることができる。

Why Apparmor in Kubernetes

AppArmorを使用する …


kube-apiserverの監査ログを取ってみる

TL;DR

KubernetesのAPIサーバで監査ログ(Audit)を有効化することでユーザのアクティビティや不正な行為を検知することができるようになる。ただしチューニングや保管先の管理は大変。

どんな情報が取れるか

監査ログはJson形式で指定したファイル、Webhook等で出力が可能。以下はaudit-test-podというPodにkubectl execでログインした際の監査ログ。
誰が・いつ・どのリソースに対して・何をしたかどのレベルで保存するか等が詳細に記録される。

{"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"15473afa-482e-419e-97b6- …

Tetsuya Isogai

Work for Hewlett Packard Enterprise as Solution Architect / Write on IT / Infrastructure / Cloud Native / Kubernetes / OpenShift / Japanese|English

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store