1.6. Domain Name System (DNS)


Domain Name System (DNS) は、www.example.com などの人間が理解しやすいドメイン名を、ネットワーク上のコンピューターを識別する IP アドレスに変換するために使用される、階層型かつ分散型の命名システムです。DNS は、サービスディスカバリーと名前解決において重要な役割を果たします。

OpenShift Container Platform は、確実に DNS 名でサービスにアクセスできるようにするため、組み込みの DNS を提供しています。これにより、基盤となる IP アドレスが変更された場合でも、安定した通信を維持できます。Pod を起動すると、サービス名、IP アドレス、ポートの環境変数が自動的に作成され、Pod は他のサービスと通信できるようになります。

1.6.1. 重要な DNS 用語

  • CoreDNS: CoreDNS は DNS サーバーであり、サービスと Pod の名前解決を提供します。
  • DNS 名: サービスには、namespace と名前に基づいて DNS 名が割り当てられます。たとえば、default namespace にある my-service という名前のサービスの DNS 名は my-service.default.svc.cluster.local になります。
  • ドメイン名: ドメイン名は、example.com など、Web サイトやサービスにアクセスするために使用されるわかりやすい名前です。
  • IP アドレス: IP アドレスは、通信に IP を使用するコンピューターネットワークに接続された各デバイスに割り当てられる数値ラベルです。IPv4 アドレスの例は 192.0.2.1 です。IPv6 アドレスの例は 2001:0db8:85a3:0000:0000:8a2e:0370:7334 です。
  • DNS サーバー: DNS サーバーは、DNS レコードの保存に特化されたサーバーです。これらのレコードは、ドメイン名を IP アドレスにマッピングします。ブラウザーにドメイン名を入力すると、コンピューターは DNS サーバーに接続して対応する IP アドレスを見つけます。
  • 解決プロセス: DNS クエリーが DNS リゾルバーに送信されます。次に、DNS リゾルバーは一連の DNS サーバーに接続して、ドメイン名に関連付けられた IP アドレスを見つけます。リゾルバーは、<namespace>.svc.cluster.localsvc.cluster.localcluster.local などの一連のドメインで、名前の使用を試みます。このプロセスは、最初に一致した時点で停止します。IP アドレスはブラウザーに返され、その IP アドレスを使用して Web サーバーに接続します。

1.6.2. 例: DNS のユースケース

この例では、フロントエンドアプリケーションが 1 つの Pod セットで実行され、バックエンドサービスが別の Pod セットで実行されています。フロントエンドアプリケーションは、バックエンドサービスと通信する必要があります。バックエンド Pod に安定した IP アドレスと DNS 名を付与するサービスを作成します。フロントエンド Pod は、個々の Pod IP アドレスが変更されても、この DNS 名を使用してバックエンドサービスにアクセスします。

バックエンド Pod 用のサービスを作成することにより、フロントエンド Pod がバックエンドサービスと通信するために使用できる、安定した IP と DNS 名 (backend-service.default.svc.cluster.local) が提供されます。この設定により、個々の Pod の IP アドレスが変更された場合でも、通信の一貫性と信頼性が維持されます。

次の手順は、DNS を使用してバックエンドサービスと通信するように、フロントエンド Pod を設定する方法の例を示しています。

  1. バックエンドサービスを作成します。

    1. バックエンド Pod をデプロイします。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: backend-deployment
        labels:
          app: backend
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: backend
        template:
          metadata:
            labels:
              app: backend
          spec:
            containers:
              - name: backend-container
                image: your-backend-image
                ports:
                  - containerPort: 8080
    2. バックエンド Pod を公開するサービスを定義します。

      apiVersion: v1
      kind: Service
      metadata:
        name: backend-service
      spec:
        selector:
          app: backend
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
  2. フロントエンド Pod を作成します。

    1. フロントエンド Pod を定義します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: frontend-deployment
        labels:
          app: frontend
        spec:
          replicas: 3
          selector:
          matchLabels:
            app: frontend
         template:
         metadata:
           labels:
             app: frontend
         spec:
           containers:
             - name: frontend-container
               image: your-frontend-image
               ports:
                 - containerPort: 80
    2. Pod 定義をクラスターに適用します。

      $ oc apply -f frontend-deployment.yaml
  3. フロントエンドをバックエンドと通信するように設定します。

    フロントエンドアプリケーションコードでは、バックエンドサービスの DNS 名を使用して要求を送信します。たとえば、フロントエンドアプリケーションがバックエンド Pod からデータを取得する必要がある場合、アプリケーションには次のコードが含まれる可能性があります。

    fetch('http://backend-service.default.svc.cluster.local/api/data')
      .then(response => response.json())
      .then(data => console.log(data));
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.