大瀧隆太(430)31この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。Interface)を設定すると、ルートテーブルの不整合でうまく通信できなかったり、アプリケーションを追加のENI経由で通信させるのに苦戦したという経験はありませんか。自分は悶々とトラブルシューティングしていた時期があり、極力使わないのがいいなという結論をブログで吐露していました。Namespace)に触れる機会があり、追加のENIの管理と相性が良かったのでご紹介してみたいと思います。Namespace(netns)は、OSのネットワークスタック(ルーティングテーブルやiptablesを含むネットワーク設定)を分離して管理できるLinuxカーネルの機能です。古くはXenやKVMなどLinuxをハイパーバイザーのホストOSとして動作させるための仮想ネットワークの中核コンポーネントとして、最近はOpenStackやDockerでの利用が有名ですね。枯れた機能と見て良いと思います。netnsを利用することで、同一のインスタンス/OS上でアプリケーションやNIC単位のネットワーク設定を持たせることができます。サーバーアプリケーションを用途ごとに複数実行するケースや、ルーティングなど複雑な設定になりがちな構成をシンプルにまとめられるのがメリットかなと思っています。eth1,eth2の2つ特にLinuxディストリビューションやEC2インスタンスタイプの制限はありませんが、インスタンスタイプによって追加のENI数の上限が異なる点にだけ留意ください。Linuxでは追加したENIのネットワークインターフェースが自動で活性化、DHCPクライアントが動作するようになっています。今回はコマンドでnetnsへのインターフェースの登録や構成を行うので、追加したENIに対応するインターフェースをダウンさせます。downインターフェース一覧を見てみましょう。ff:ff:ff:ff:ff:ff$では、netnsを構成していきます。netnsでは、Namespaceという論理単位で前述のネットワークスタックを持ちます。netnsの操作はiproute2に統合されているので、ipコマンドで操作します。設定には/var/run/netns/以下のファイルの書き込み権が必要なので、基本的にはsudoコマンドなどrootの権限で操作します。green一般的なnetnsの解説ではおもむろにveth(仮想イーサネット)を作成して繋ぐというケースが多いのですが、今回はNamespaceさえ分けられれば要件としては十分なので、ENIに対応するネットワークインターフェース(eth*)をNamespaceに直接割り当てます。blueにeth1、greenにeth2をアサインします。green図に書くとこんな感じ。linkコマンドで再度、インターフェースの居所を確認してみましょう。ff:ff:ff:ff:ff:ff$eth1とeth2が姿を消し、それぞれのNamespaceに移っていることがわかります。<コマンド>で、Namespace上で任意のコマンドを実行するのが簡単です。ff:ff:ff:ff:ff:ff$各Namespaceごとにループバックインターフェースloとアサインしたネットワークインターフェースeth*が確認できますね。ループバックインターフェースは初期状態だと不活性でループバックアドレスも付与されていないので、以下のコマンドで対応しましょう。blueとgreenの両方に行うので、ここでは-allオプション(全Namespaceでのコマンド実行)で実行します。execのコマンドにbashを指定してシェルを起動するのが便利です。sudoコマンドで実行するので、rootユーザーの権限でのコマンド操作になることに注意してください。bash#先ほどアサインしたネットワークインターフェースを活性化しましょう。IPアドレスはDHCPもしくは静的に付与すればOKです。今回はdhclientコマンドでDHCPを動作させます。DHCPではデフォルトルートが設定されなかったので、デフォルトルートを追加で付与しました。Namespaceのインターフェースの疎通はOKです。greenも同様に対応します。foreverOKですね。ルーティングテーブルやNetfilter(iptables)がNamespaceごと別々になっている様子を確認します。destination#今回は特に必要なかったのですが、netnsにはresolv.confとhostsをNamespaceごとに/etc/netns/<Netspace名>/{resolv.conf|hosts}というファイル名で設定することもできます。デフォルトでは/etc/resolv.conf、/etc/hostsを参照します。アプリケーションの実行では、用意したNamespaceでサーバーアプリケーションを実行してみましょう。execコマンドをそのまま利用します。今回はWebサーバーのNginxを実行してみました。nginxサーバーアプリケーションの種類によって、実行するコマンドラインやオプションは調整してください。cURLで試してみます。bytes$ローカルホスト非NamespaceではNginxを実行していないのでエラー、各Namespace上でローカルホストへのリクエストが通るはずです。bytes想定通りですね。今回はわかりやすくするためにサーバーアプリケーションを動作させる例でしたが、NATやVPNなどネットワークサービスをNamespaceごとに提供するユースケースにも有効だと思います。OSの起動に合わせてnetnsおよびアプリケーションを稼働させる場合は、SysVinitやsystemdでの設定を行うことになります(ざっくりrc.localでもいいかもしれませんが)。systemdについてはGitHubにテンプレートが公開されているので、参考になるかもしれません。systemd/systemdまとめnetnsを使ってENIごとにネットワーク設定を持たせる構成をご紹介しました。EC2であれば複数インスタンス構成にしてしまうのが最もシンプルですが、なんらかの事情で複数ENIでえんやこらとやるときに参考になれば幸いです。めもめも脚注ネーミングは、Blue/Greenデプロイメントとは特に関係ありません。4,302,309ゲストブロガーです。株式会社ソラコムでソリューションアーキテクトやってます。クラウドの自動化やIoT周りについての記事を書きます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健232こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。カフェ店長のオカノです。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。