こんにちは。よっしーです(^^)
今日は、Komposeで作成されたファイルについてご紹介します。
背景
この記事は、komposeコマンドを使用して、Docker ComposeファイルからKubernetesマニフェストに変換されたファイルについて解説しています。komposeコマンドで変換したときの記事は下記を御覧ください。
作成されたファイル一覧
Komposeによって作成されたファイルは下記になります。
kompose-sample-net-networkpolicy.yaml
nginx-deployment.yaml
nginx-tcp-service.yaml
php-fpm-deployment.yaml
php-fpm-service.yaml
kompose-sample-net-networkpolicy.yaml
ファイル内容は下記になります。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: kompose-sample-net
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/kompose-sample-net: "true"
podSelector:
matchLabels:
io.kompose.network/kompose-sample-net: "true"
このコードは、Kubernetesのネットワークポリシーを定義するためのYAMLファイルです。
apiVersion: networking.k8s.io/v1
は、Kubernetes APIのバージョンを指定しています。このコードはKubernetesのバージョン1以上で動作します。
kind: NetworkPolicy
は、作成するリソースの種類を指定しています。この場合はネットワークポリシーを定義しています。
metadata
セクションでは、ネットワークポリシーのメタデータ情報を指定します。creationTimestamp
は作成時刻を表すタイムスタンプであり、name
はネットワークポリシーの名前を指定します。
spec
セクションでは、ネットワークポリシーの詳細な仕様を指定します。
ingress
セクションでは、入力トラフィックのルールを定義します。ここでは、from
セクション内で指定された条件に一致するポッドからの入力トラフィックを許可します。具体的には、podSelector
セクション内でio.kompose.network/kompose-sample-net: "true"
というラベルが一致するポッドからのトラフィックを許可します。
podSelector
セクションでは、このネットワークポリシーが適用されるポッドのセレクターを指定します。同様に、io.kompose.network/kompose-sample-net: "true"
というラベルが一致するポッドに対してこのネットワークポリシーが適用されます。
このコードは、名前が”kompose-sample-net”でラベルが”io.kompose.network/kompose-sample-net: “true””と一致するポッドからの入力トラフィックを許可するネットワークポリシーを定義しています。
解説
Ingressとは
KubernetesにおけるIngressは、クラスター外部からのトラフィックを内部のサービスにルーティングするためのリソースです。IngressはHTTPやHTTPSのトラフィックを処理するためのルールとして機能し、トラフィックの負荷分散やTLS終端、パスベースのルーティングなどの機能を提供します。
具体的には、Ingressリソースは以下のような構成要素を持ちます:
- ルール (Rules): Ingressリソースは1つ以上のルールを定義します。ルールは、特定のホスト名またはパスに対するトラフィックのルーティングを指定します。ルールには対応するサービスへのルーティング方法も指定されます。
- バックエンド (Backends): ルール内のバックエンドは、トラフィックを受け取る実際のサービスを指定します。バックエンドはサービスの名前またはIPアドレスとポート番号で指定されます。
- TLS (Transport Layer Security): クラスター内でTLS終端を行う場合、IngressリソースにTLS設定を追加することができます。これにより、外部からの暗号化されたトラフィックを受け付け、復号化してバックエンドサービスに転送することができます。
Ingressリソース自体は、Kubernetesクラスター内のIngressコントローラによって実際の機能が提供されます。IngressコントローラはIngressリソースを監視し、設定に基づいてルーティングや負荷分散を行います。さまざまなIngressコントローラが利用可能であり、Nginx Ingress ControllerやTraefikなどがよく使われています。
Ingressを使用することで、Kubernetesクラスター内のサービスへの外部からのアクセスを効果的に制御することができます。異なるパスやホスト名に基づいたトラフィックのルーティング、TLS終端、負荷分散などの機能を提供し、柔軟で強力なネットワーキングの構築が可能となります。
podSelectorとは
podSelector
は、Kubernetesのネットワークポリシー(NetworkPolicy)において使用されるセレクターです。podSelector
を使用することで、特定の条件に一致するポッドを選択することができます。
ネットワークポリシーは、ネットワークトラフィックのルールを定義するために使用されます。podSelector
は、どのポッドがネットワークポリシーの適用対象であるかを指定するために使用されます。
具体的には、podSelector
はポッドのラベルセレクターを指定します。ラベルはポッドに付けられたキーと値のペアであり、ポッドを識別するために使用されます。podSelector
を使用することで、特定のラベルセレクターに一致するポッドを選択することができます。
例えば、以下のようなpodSelector
があるとします:
podSelector:
matchLabels:
app: frontend
この例では、app: frontend
というラベルが一致するポッドが選択されます。したがって、ネットワークポリシーはapp: frontend
というラベルを持つポッドにのみ適用されます。
podSelector
を使用することで、ネットワークポリシーを特定のポッドに対して適用することができます。これにより、ポッド間の通信制御やセキュリティの強化など、ネットワークトラフィックの管理が可能となります。
おわりに
今日は、Komposeで作成されたkompose-sample-net-networkpolicy.yamlについてご紹介しました。次回も、Komposeで作成されたファイルを解説していきたいと思います。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント