第2章 Linuxネットワーク Linuxネットワーキング
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Kubernetesにおけるネットワーキングの実装を理解するためには、Linuxにおけるネットワーキングの基礎を理解する必要がある。結局のところ、KubernetesはLinux(またはWindows!)マシンのための複雑な管理ツールであり、Kubernetesネットワークスタックで作業している間、これを無視することは難しい。この章では、Kubernetesで注目すべき分野に焦点を当てながら、Linuxネットワークスタックの概要を説明する。Linuxのネットワーキングとネットワーク管理に精通しているのであれば、この章は読み飛ばすか、読み飛ばしてもよいだろう。
チップ
この章()では、多くのLinuxプログラムを紹介している。man <program> でアクセスできるマニュアル(man)ページには、より詳細な情報が掲載されている。
基本
第1章で使った Goウェブサーバをもう一度見てみよう。このウェブサーバはポート8080でリッスンし、/へのHTTPリクエストに対して "Hello "を返す(例2-1参照)。
例2-1. Goによる最小ウェブサーバ
packagemainimport("fmt""net/http")funchello(whttp.ResponseWriter,_*http.Request){fmt.Fprintf(w,"Hello")}funcmain(){http.HandleFunc("/",hello)http.ListenAndServe("0.0.0.0:8080",nil)}
警告
ポート1〜1023(ウェルノウンポートとも呼ばれる)は、バインドするのにroot権限が必要である。
つまり、典型的なウェブ・サービスは、ルート・ユーザとして実行されるべきではない。このため、多くのプログラミングは1024番ポート以上でリッスンすることになる(特にHTTPサービスでは8080番ポートがよく使われる)。可能であれば、非特権ポートでリッスンし、インフラ・リダイレクト(ロードバランサ転送、Kubernetesサービスなど)を使って、外部から見える特権ポートを非特権ポートでリッスンしているプログラムに転送する。
こうすることで、あなたのサービスの脆弱性を悪用する攻撃者が、過度に広範なパーミッションを利用できなくなる。
このプログラムがLinuxサーバーマシンで実行されていて、外部クライアントが/ にリクエストを出したとする。 サーバーでは何が起こるか? まず始めに、このプログラムはアドレスとポートをリッスンする必要がある。 このプログラムはそのアドレスとポートに対応するソケットを作成し、それにバインドする。 このソケットは、指定されたアドレスとポート(ここでは任意のIPアドレスで8080 )の両方宛てのリクエストを受け取る。
注
0.0.0.0 IPv4の 、IPv6の 、ワイルドカードアドレスである。それぞれのプロトコルのすべてのアドレスにマッチするため、ソケットバインディングに使用すると、利用可能なすべてのIPアドレスをリッスンする。[::]
これは、サービスを実行するマシンのIPアドレスを事前に知ることなく、サービスを公開するのに便利である。 ほとんどのネットワーク公開サービスは、この方法でバインドする。 ...