k8s ミリしら向けの AWX on MicroK8s with プロキシ

Docker ぐらいならなんとかわかるけど、 Kubernetes (k8s) は全然わかっていない人向けに、プロキシ環境下の MicroK8s 上で AWX をインストールする手順と、その周囲情報を説明していく。

AWX とは

AWX とは、 Ansible Automation Controller (旧称: Ansible Tower) と呼ばれる Ansible の構成コードの実行を管理する WebUI を持ったツールの OSS版だ。

Ansible とは IaC (Infrastracture as Code) ができる CUI ツールであり、構成先に Python さえ入っていれば、そこに ssh するだけで実行できるのが特徴だ。
AWX はこれを Git などのソースコード管理ツールと連携しながら、 Web UI 上で実行・管理・記録できるツールとなる。

Ansible Automation Controller と比べると、 Red Hat によるサポートや LTS はなく、 ローリングリリースモデルを採用していて更新が激しい。
このため、エンタープライズ用途には基本的には向かないものの、元々そんなに破壊的変更が頻繁にあるタイプのツールではないため、小規模に使う程度ならかなり実用的になっている。
(但し 2024年9月現在、次回のメジャー更新の v25 あたりで、認可・認証の内部構成が大きく変わる予定ではある 1)

Kubernetes と MicroK8s

AWX を運用環境にインストールするには、 Kubernetes が必須となっている。

Kubernetes (多くは K8s と略される) は、コンテナ管理ツールのひとつで、コンテナオーケストレーションツールとも呼ばれる。

コンテナ管理といえば、 Docker が非常に有名だ。
Docker はどちらかというと開発者よりのツールで、一つのコンテナないし、 Docker Compose を使って一つのホスト(マシン)内に閉じた複数のコンテナの管理に特化している。

一方、多少規模のあるサービスをコンテナで運用する場合、複数ホストにまたがっていくつものコンテナを協調動作させる場合が多い。

Kubernetes であれば複数のホストに跨がって複数のコンテナを協調操作させる運用管理ができる。
例えば・・・

  • 異なるホストで動作しているコンテナを、同じ仮想ネットワークにあるかのように扱う
  • 負荷に応じてコンテナをスケーリングする
  • コンテナ起動やダウン時の自己修復や負荷分散のロジック等を自分で作り込む

といった事ができる。

続きを読む

Hyper-V 等の VM 上にプロキシと DNS を立てる

本ブログでは、ちょいちょいプロキシ環境下での設定方法を紹介しているが、
そういったプロキシ環境下での動作の検証のため、以下を満たすプロキシサーバーを立てたい。

  • OS は Ubuntu 24.04
  • squid によって 8080 ポートにて HTTP プロキシする
  • bind9 によって自身のアドレスを proxy.example.com として名前解決する DNS サーバーとなる

とりあえず、 squid と bind9 をいれて、設定ファイルを必要最低限書き換えてみよう。

export CURRENT_IP_ADDRESS=`hostname -I | tr -s ' ' '\n' | tail -n 1`
sudo apt -y install squid bind9 bind9utils
sudo sed -i -r -e 's/^(#\s*)(http_access allow localnet)/\2/' -e 's/^http_port 3128/http_port 8080/' /etc/squid/squid.conf
sudo sed -i -e 's%^\s*\(//\)\?\s*forwarders {%        forwarders {\n                8.8.8.8;\n        };\n\0%' -e 's%^};%\0\nzone "proxy.example.com" in {\n  type master;\n  file "proxy.example.com.zone";\n};%' /etc/bind/named.conf.options
sudo tee /var/cache/bind/proxy.example.com.zone << EOF > /dev/null
\$TTL 86400
@       IN      SOA     proxy.example.com. root.proxy.example.com. (
                        2023070301      ;Serial
                        3600            ;Refresh
                        1800            ;Retry
                        604800          ;Expire
                        86400           ;Minimum TTL
)
@       IN      NS      proxy.example.com.
@       IN      A       $CURRENT_IP_ADDRESS
EOF
sudo systemctl restart squid named

これだけ。

続きを読む

MicroK8s で kustomization.yaml を apply すると error: accumulating resources になる問題

MicroK8s で kustomization.yaml を apply した際に、 error: accumulating resources が発生する問題についてのメモ。

端的に言うと、snap でインストールした MicroK8s で、内部的に git コマンドが実行される操作をすると、おかしくなる模様。

発生する問題

snap で MicroK8s をインストールし、 kubectl apply -k する。
このとき、Kustomize に指定する kustomization.yaml には、直接的または間接的に remote directory 方式のリソースを参照する。

$ sudo snap install microk8s --classic --channel=latest/stable
$ cat << EOF > ./kustomization.yaml
resources:
- https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1
EOF
$ microk8s kubectl apply -k .

すると、以下のようなエラーが発生する。

ホストOS に git がインストールされている場合:

error: accumulating resources: accumulation err='accumulating resources from 'https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1': URL is a git repository': failed to run '/snap/microk8s/6364/usr/bin/git fetch --depth=1 https://github.com/kubernetes-sigs/kustomize v3.3.1': /usr/lib/git-core/git-remote-https: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
: exit status 128

ホストOS に git がインストールされていない場合:

error: accumulating resources: accumulation err='accumulating resources from 'https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1': URL is a git repository': failed to run '/snap/microk8s/6364/usr/bin/git fetch --depth=1 https://github.com/kubernetes-sigs/kustomize v3.3.1': fatal: unable to find remote helper for 'https'
: exit status 128

ワークアラウンド

続きを読む

楽天をサブ回線にして Rakuten Link (Office) で発信すると非通知になる問題を解消する

楽天の株主優待制度の eSIM が届いたので、 Rakuten UN-LIMIT VI 廃止以来久々に楽天回線を利用した。
MNP できないため、サブ回線としてデータ通信のみで使っている。

以前と比べると、楽天回線 (2024年現在 Band 3 のみ) に繋がる場所も増えてきているし、パートナー回線(au)との切り替えもスムーズで、確かに進化を感じる。

さて、 Rakuten 回線のメリットの一つに、 Rakuten Link (株主優待回線の場合は Rakuten Link Office) を使うと、通話料が無料となる点がある。

特に発信元の電話番号にこだわりの無いところに電話する場合は、主回線ではなく Rakuten Link で電話することで通話料金を節約できる訳だ。

ところが、どうも Rakuten Link で電話をかけたとき、主回線の時と比べて電話に出てもらえないことが多い気がする。
もしやと思って自分自身に電話をかけてみたところ……


ああ、非通知設定で発信されているでは無いか。

この問題を解消しよう。

Rakuten 回線にしても非通知のまま

続きを読む

Raspberry Pi 5 に Ubuntu 24.04 LTS を入れて SSH するまで

ついに日本でも、 Raspberry Pi 5 の技適対応モデルが発売された。

Raspberry Pi にインストールする OS と言えば、まずは Raspberry Pi OS (旧 Raspbian) だが、同じ Debian ベースの Ubuntu も Raspberry Pi 向けの公式イメージを出している。

但し、 Raspberry Pi 5 に対応しているのは、 Ubuntu 23.10 (コードネーム: mantic) 以降のみとなる。

Ubuntu 23.10 自体は「非LTS」バージョンとなり、サポートが 9ヶ月 (2024年6月まで) と短い。
常用するなら、サポートが 5年 (ESM なら 10年) と長い LTS バージョンが望ましい。

そこで今回は 2024年4月25日 にリリースされたばかりの、 24.04 LTS (コードネーム: noble) を使って、 ディスプレイやキーボードが無い状態でインストールから SSH 接続までやってみよう。

Raspberry Pi 5 をターゲットに書いているが、 Raspberry Pi 3, 4, Raspberry Pi Zero 2 W でも同じ手順でできるはずだ。

TL;DR

準備するもの

  • Raspberry Pi 5
    • Raspberry Pi 3, 4 でも同じ手順でいけるはず
  • 4GB 以上の micorSD カード
    • IOPS が高い、「アプリケーションパフォーマンスクラス」が A2 のものが良いだろう。値段や速度を考えると、実用上は 64GB 以上になるだろうか。
    • 私は、ARCANITE 64GB microSDXCカード 【A2】、UHS-I U3、V30、4K、C10 値段の割にパフォーマンスが良かったため、これを使った。
    • 後述するが、最終的には NVMe SSD にした方が断然良い
  • microSD を書き込める PC (Win, Linux, mac)
  • インターネットに繋がる Wi-Fi または イーサネットケーブル

以下もあると便利だが、今回の手順では無くても問題ない。

  • micro-HDMI で繋がるディスプレイ 又は 変換コネクタ
  • RasPi に繋げる USB キーボード

イメージファイルの取得

続きを読む

NEC IXシリーズルーターでポートVLANとタグVLANをVLANスイッチ的に併用する

この記事では、 GE0, GE1 の 2つの "デバイス" を持つ NEC の IX2105 ルーターを例に、1カ所のスイッチングハブ用のデバイスの中で ポートVLAN と タグVLAN を併用し、スイッチングハブのトランクポートやアクセスポートのように使う方法について説明する。

はじめに

国内の中規模オフィス向けのルーターとして、 Yamaha や Cisco がよく知られているが、 NEC も UNIVERGE IXシリーズ を提供している。

Yamaha の RTXシリーズ と価格帯が近いものの、 NEC の IXシリーズ には、 Yamaha と比べてもわりと柔軟な構成を行える利点がある。

一方で Yamaha と比べた場合、 NEC の IXシリーズ の設定方法を調べるのは少し…いや、だいぶ難しい。
書籍や Web 記事、公式マニュアルなど、ドキュメントや設定例の全てに於いて、 Yamaha と比べて著しく情報が少ないためだ。

そんな IXシリーズ を使って、ポートVLAN と タグVLAN を併用する方法について紹介しよう。
(この併用も、Yamaha の RTX で同一ポート内で実現するのは難しい機能のひとつだ)

なお、同じ UNIVERGE でも LTE や Wi-Fi などのワイヤレス機能を持った WAシリーズ では、 VLAN 周りのコマンド体系が異なるため、このページの方法は使えない。

設定例として挙げている IX2105 は 2019年9月30日をもって販売を終了 しているが、マイナーバージョンこそ Ver.10.2 までに留まるものの不具合修正は続いている。
(例えば後継の IX2106 だと 10.2系 は Ver.10.2.26 までで終了し、最新版は Ver.10.8.21 となっている)
中古ならヤフオク等で二束三文で手に入るし、最新 FW (ソフトウェア) も NEC に "UNIVERGE IXシリーズ ソフトウェアダウンロードサイトへの接続申請書" を出せば手に入るので、練習機としてはもってこいだ。

ゴール

以下のような構成を行う。

  • 既定ではスイッチングハブとなっている、 GE1 デバイスの4つの物理ポートを、以下の3つに分割する
    • タグ付き通信を行う(即ちトランクポートとなる)1番ポート
      • 但し、管理VLAN 的に使うため、 untag のフレームも受け付ける
    • VLAN100 の通信を untag で行う(即ちアクセスポートとなる)2番ポート
    • VLAN200 の通信を untag で行う(即ちアクセスポートとなる)3, 4番ポート
  • 各 VLAN それぞれで DHCP サーバによる異なるセグメントの IP アドレスの割り当てを行う
  • GE0 デバイスでは NAT (NAPT) を行い、 GE1 デバイスの各セグメントからのルーティングも受け付ける

先に最終的な構成を載せておくと、以下のようになる。

続きを読む