0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘】非エンジニアによるKubernetes学習アウトプット⑥(Networkingについて)

Posted at

本記事は、非エンジニアである筆者がKubernetesを学習する中でのアウトプット(備忘録)です。
なお、記事の執筆にあたり生成AIも活用し調査のうえ記載していますが、万が一誤りがあればご指摘いただけると幸いです。


前回は、屋台(Pod)の大事な売上やデータを守るための「Storage(貸し倉庫)」について学びました。
※前回の記事:「【備忘】非エンジニアによるKubernetes学習アウトプット⑤(Storageについて)」

ここまでで「屋台を自動で増やし(Deployment)」「窓口を設け(Service)」「データも守れる(Storage)」ようになりました。
かなり最強の屋台村になってきましたが、運営していくうちに新たな疑問が湧いてきました。

「屋台(Pod)同士って、どうやって連絡を取り合っているの?」
「そもそも、サーバー(コンピュータ)の中で通信するってどういうこと?」

今回は、Kubernetesの通信の仕組みを学ぶ前に、まずは基礎となる「Docker時代の通信(4つのモード)」をおさらいし、その上でKubernetesがどのように問題を解決しているのか(Ingress, Namespace)をまとめます。


1. 前提知識:Dockerの「4つの通信モード」

Kubernetesを使う前(Docker単体)の時代、コンテナが外の世界や他のコンテナと会話するには、以下の4つのモードを使い分ける必要がありました。
これを「住まいと電話」に例えて整理してみます。

① None Network(無人島モード)

  • 状態: ネットワークケーブルが一切繋がっていない状態。
  • イメージ: 「無人島にある独房」
  • 特徴: 外部とは一切連絡が取れません。最高のセキュリティですが、誰とも会話できないので、ただ計算するだけの処理などに使われます。

② Bridge Network(マンションの個室モード) ※デフォルト

  • 状態: コンテナごとに独自のIP(内線番号)を持つが、外に出るにはホストの変換機能(NAT)を通る必要がある。
  • イメージ: 「マンションの各部屋」
  • 特徴: 「101号室」「102号室」のように個別の番号を持ちます。マンション内(同じホスト内)の住民とは内線で話せますが、外の世界と話すには「管理人室(Bridge)」を経由して中継してもらう必要があります。一番よく使われる基本の形です。

③ Host Network(シェアハウスのリビングモード)

  • 状態: コンテナがホスト(サーバー本体)のネットワークをそのまま共有する。
  • イメージ: 「シェアハウスのリビング」
  • 特徴: 個室(独自のIP)を持たず、住人全員が同じ電話回線を共有します。「俺への電話はリビングの電話にかけて!」という状態です。通信は速いですが、「電話の取り合い(ポートの競合)」が起きやすく、管理が大変です。

④ Overlay Network(どこでもドアモード)

  • 状態: 物理的に離れたサーバー(ホスト)同士を、仮想のトンネルで繋ぐ。
  • イメージ: 「別のマンションへ繋がる地下トンネル」
  • 特徴: これが一番重要です!A棟のマンションとB棟のマンションを繋ぎ、あたかも「同じマンションの隣の部屋」であるかのように通信できるようにします。
    Kubernetesでは、CNIプラグインと呼ばれる仕組みを通じて、このOverlay的な通信が実現されています。
    だからこそ、複数のサーバーにまたがって屋台(Pod)を置けるのです。

image.png
※左から「None(孤立)」「Bridge(個室)」「Host(同居)」「Overlay(トンネル接続)」のイメージ


2. Kubernetes村の「3つの通信ルール」

Dockerの基礎(特にOverlayの概念)を踏まえた上で、Kubernetesの世界を見てみます。Kubernetesでは、複雑な設定をしなくても、以下のルールが最初から適用されています。

  1. 全ての屋台は「独自の住所(IP)」を持つ
    (DockerのBridgeモードのように、全ての屋台に個別の番号が与えられます)
  2. 屋台同士は「内線電話」で直接話せる
    (DockerのOverlayモードのように、別のサーバーにある屋台とも、面倒な手続きなしで直接会話できます)
  3. 「自分が見ている住所」と「相手から見える住所」は同じ
    (なりすましや変換をせず、シンプルに繋がります)

つまり、Kubernetesは「最初から全店舗に直通電話が完備された、巨大なチェーン店ネットワーク」なのです。


3. Ingress:【総合案内所】(スマートな入り口)

内部の連絡網は完璧です。
では、外部のお客さんをどう案内しましょうか?

これまでは「Service」を使って、屋台ごとに窓口を作っていました。
しかし、屋台が50個に増えたら、窓口も電話番号も50個必要になり、お客さんは混乱してしまいます。

そこで登場するのが、Ingress(イングレス) です。
Ingressは、ショッピングモールの入り口にある「総合案内所(コンシェルジュ)」のような存在です。

Ingressのお仕事イメージ

  1. 入り口は一つだけ: お客さんは全員、まずこの「総合案内所」に来ます。(電話番号・IPは1つでOK!)
  2. 看板(URL)を見て誘導: コンシェルジュはお客さんの要望(URL)を見て、適切な窓口(Service)へ案内します。
  • /food(食事)に行きたい」 → 「はい、ラーメン屋の窓口(Service A)へどうぞ」
  • /drink(飲み物)に行きたい」 → 「では、カフェの窓口(Service B)へどうぞ」

これなら、裏側で屋台がいくら増減しても、お客さんは「いつもの入り口」さえ知っていれば迷いません。


4. Namespace:【フロア分け】(混雑と事故を防ぐ)

最後にもう一つ、覚えておきたい大事な概念が Namespace(ネームスペース) です。
これは、巨大なショッピングモールを「フロア」や「エリア」で区切る機能です。

もし、この屋台村(クラスター)を、「開発チーム」と「本番チーム」で共有していたらどうなるでしょうか?
開発チームが「テスト用の新しいラーメン屋(Pod)」を作ろうとしたとき、間違って「本番用のラーメン屋」を壊して上書きしてしまったら大惨事です。

そこで、Namespaceを使って空間を分けます。

  • Namespace A(1階:本番フロア): お客さんが入る本番エリア。ここには本番用の屋台しか置かない。
  • Namespace B(2階:開発フロア): 従業員専用の研究エリア。ここで何回屋台を爆発させても、1階には影響しない。

Namespaceのメリット

  • 名前被りOK: 1階と2階なら、同じ「ラーメン屋(my-app)」という名前のお店があっても区別できます。
  • 事故防止: 「2階の屋台を全部消して!」という命令を間違って出しても、1階の屋台は無事です。

まとめ

  • Dockerの通信:

    • None: 孤立(無人島)
    • Bridge: 個室(基本)
    • Host: 同居(高速だが競合する)
    • Overlay: トンネル接続(複数サーバーを繋ぐ)
  • Kubernetesの通信: CNIプラグインによって実現されており、Overlay的な考え方をベースに、Pod同士が自由に通信できる環境が提供されている

  • Ingress: 外部からのアクセスを一手に引き受ける「総合案内所」。URLを見て適切なServiceへ振り分ける

  • Namespace: クラスター内を論理的に区切る「フロア分け」。開発環境と本番環境を混ぜないために使う

これで、安全かつスムーズにお客さんを迎え入れる準備が整いました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?