1.9. セキュリティーとトラフィック管理


管理者は、ClusterIPNodePortLoadBalaner などのサービスタイプと、IngressRoute などの API リソースを使用して、アプリケーションを外部トラフィックに公開し、ネットワーク接続を保護できます。Ingress Operator と Cluster Network Operator (CNO) は、これらのサービスとリソースの設定と管理に役立ちます。Ingress Operator は、1 つ以上の Ingress Controller をデプロイおよび管理します。これらのコントローラーは、外部の HTTP および HTTPS トラフィックをクラスター内のサービスにルーティングします。CNO は、Pod ネットワーク、サービスネットワーク、DNS などのクラスターネットワークコンポーネントをデプロイおよび管理します。

1.9.1. アプリケーションの公開

ClusterIP は、クラスター内の内部 IP でサービスを公開し、クラスター内の他のサービスのみがクラスターにアクセスできるようにします。NodePort サービスタイプは、各ノードの IP 上の静的ポートでサービスを公開します。このサービスタイプでは、外部トラフィックがサービスにアクセスできます。ロードバランサーは通常、MetalLB を使用するクラウドまたはベアメタル環境で使用されます。このサービスタイプは、外部トラフィックをサービスにルーティングする外部ロードバランサーをプロビジョニングします。ベアメタル環境では、MetalLB は VIP と ARP アナウンスメントまたは BGP アナウンスメントを使用します。

Ingress は、負荷分散、SSL/TLS Termination、名前ベースの仮想ホスティングなどのサービスへの外部アクセスを管理する API オブジェクトです。NGINX や HAProxy などの Ingress Controller は、Ingress API を実装し、ユーザーが定義したルールに基づいてトラフィックルーティングを処理します。

1.9.2. 接続のセキュリティー保護

Ingress Controller は、SSL/TLS Termination を管理し、着信 SSL/TLS トラフィックをバックエンドサービスに渡す前に復号します。SSL/TLS Termination により、暗号化/復号プロセスがアプリケーション Pod からオフロードされます。TLS 証明書を使用して、クライアントとサービス間のトラフィックを暗号化できます。cert-manager などのツールを使用して証明書を管理し、証明書の配布と更新を自動化できます。

SNI フィールドがある場合、ルートは TLS トラフィックを Pod に渡します。このプロセスにより、HTTP/HTTPS だけでなく TLS を使用して、TCP を実行するサービスを公開できるようになります。サイト管理者は証明書を一元管理でき、権限を持たないアプリケーション開発者による秘密鍵の読み取りを許可できます。

Route API を使用すると、クラスターが管理する証明書を使用してルーターから Pod へのトラフィックを暗号化できます。これにより、内部の通信区間の暗号化は維持されたまま、外部証明書が一元管理されます。アプリケーション開発者は、アプリケーション用の一意の秘密鍵を受け取ります。これらの鍵は Pod 内にシークレットとしてマウントできます。

ネットワーク制御は、Pod 間および Pod と他のネットワークエンドポイント間で通信する方法のルールを定義します。これにより、クラスター内のトラフィックフローが制御され、セキュリティーが強化されます。この制御はネットワークプラグインレベルで実装され、許可されたトラフィックのみが Pod 間で流れるようにします。

ロールベースのアクセス制御 (RBAC) は、権限を管理し、クラスター内のリソースにアクセスできるユーザーを制御します。サービスアカウントは、API にアクセスする Pod にアイデンティティーを提供します。RBAC を使用すると、各 Pod が実行できる操作を細かく制御できます。

1.9.3. 例: アプリケーションの公開と接続の保護

この例では、クラスター内で実行されている Web アプリケーションに外部ユーザーがアクセスする必要があります。

  1. ニーズに合うサービスタイプを使用して、サービスを作成し、アプリケーションをサービスとして公開します。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-web-app
    spec:
      type: LoadBalancer
      selector:
        app: my-web-app
      ports:
      - port: 80
        targetPort: 8080
    Copy to Clipboard Toggle word wrap
  2. HTTP/HTTPS トラフィックを管理し、サービスにルーティングするための Ingress リソースを定義します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-web-app-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: mywebapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-web-app
                port:
                  number: 80
    Copy to Clipboard Toggle word wrap
  3. Ingress に TLS を設定して、安全で暗号化された接続を確保します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-web-app-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      tls:
      - hosts:
        - mywebapp.example.com
        secretName: my-tls-secret
      rules:
      - host: mywebapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-web-app
                port:
                  number: 80
    Copy to Clipboard Toggle word wrap

1.9.4. サービスタイプと API リソースの選択

サービスタイプと API リソースには、アプリケーションの公開とネットワーク接続の保護に関連するさまざまな利点があります。適切なサービスタイプまたは API リソースを活用することで、アプリケーションの公開方法を効果的に管理し、内部クライアントと外部クライアントの両方に対して安全で信頼性の高いアクセスを確保できます。

OpenShift Container Platform は、次のサービスタイプと API リソースをサポートしています。

  • サービスタイプ

    • ClusterIP は、内部のみの公開を目的としています。容易にセットアップでき、クラスター内のサービスにアクセスするための安定した内部 IP アドレスを提供します。ClusterIP は、クラスター内のサービス間の通信に適しています。
    • NodePort は、各ノードの IP 上のサービスを静的ポートで公開することで、外部アクセスを許可します。容易にセットアップでき、開発やテストに役立ちます。NodePort は、クラウドプロバイダーのロードバランサーを必要としない単純な外部アクセスに適しています。
    • LoadBalancer は、トラフィックを複数のノードに分散するために、外部ロードバランサーを自動的にプロビジョニングします。信頼性と可用性の高いアクセスを必要とする実稼働環境に最適です。
    • ExternalName はサービスを外部 DNS 名にマッピングし、クラスター外のサービスに、DNS 名を使用してアクセスできるようにします。外部サービスやレガシーシステムをクラスターと統合する場合に適しています。
    • Headless サービスは、安定した ClusterIP を提供せずに Pod IP のリストを返す DNS 名です。これは、ステートフルアプリケーションや、個々の Pod IP への直接アクセスが必要なシナリオに最適です。
  • API リソース

    • Ingress は、負荷分散、SSL/TLS Termination、名前ベースの仮想ホスティングをサポートし、HTTP および HTTPS トラフィックのルーティングを制御します。サービス単独よりも柔軟性が高く、複数のドメインとパスをサポートします。複雑なルーティングが必要な場合、Ingress が最適です。
    • RouteIngress に似ていますが、さらに TLS 再暗号化やパススルーなどの追加機能を提供します。これを使用することで、サービスの外部公開プロセスが単純化されます。Route は、統合された証明書管理などの高度な機能が必要な場合に最適です。

簡単にサービスを外部トラフィックに公開できる方法が必要な場合は、おそらく Route または Ingress が最適な選択肢です。これらのリソースは、namespace 管理者または開発者が管理できます。最も簡単な方法として、ルートを作成し、その外部 DNS 名を確認し、外部 DNS 名を指す CNAME を持つように DNS を設定できます。

HTTP/HTTPS/TLS の場合、Route または Ingress で十分です。それ以外の場合はより複雑で、クラスター管理者はポートがアクセス可能であることや MetalLB が設定されていることを確認する必要があります。クラウド環境または適切に設定されたベアメタル環境の場合、LoadBalancer サービスも選択肢として検討できます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat