8.3. サービスを使用して仮想マシンを公開する


Service オブジェクトを作成して、クラスター内またはクラスターの外部に仮想マシンを公開することができます。

8.3.1. サービスについて

Kubernetes サービスは一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、タイプ NodePortLoadBalancer の場合は外部世界への露出を提供します。

ClusterIP
内部 IP アドレスでサービスを公開し、クラスター内の他のアプリケーションに DNS 名として公開します。1 つのサービスを複数の仮想マシンにマッピングできます。クライアントがサービスに接続しようとすると、クライアントのリクエストは使用可能なバックエンド間で負荷分散されます。ClusterIP はデフォルトのサービスタイプです。
NodePort
クラスター内の選択した各ノードの同じポートでサービスを公開します。NodePort は、ノード自体がクライアントから外部にアクセスできる限り、クラスターの外部からポートにアクセスできるようにします。
LoadBalancer
現在のクラウド(サポートされている場合)に外部ロードバランサーを作成し、固定の外部 IP アドレスをサービスに割り当てます。
注記

オンプレミスクラスターの場合、MetalLB Operator をデプロイすることで負荷分散サービスを設定できます。

8.3.2. デュアルスタックサポート

IPv4 および IPv6 のデュアルスタックネットワークがクラスターに対して有効にされている場合、Service オブジェクトに spec.ipFamilyPolicy および spec.ipFamilies フィールドを定義して、IPv4、IPv6、またはそれら両方を使用するサービスを作成できます。

spec.ipFamilyPolicy フィールドは以下の値のいずれかに設定できます。

SingleStack
コントロールプレーンは、最初に設定されたサービスクラスターの IP 範囲に基づいて、サービスのクラスター IP アドレスを割り当てます。
PreferDualStack
コントロールプレーンは、デュアルスタックが設定されたクラスターのサービス用に IPv4 および IPv6 クラスター IP アドレスの両方を割り当てます。
RequireDualStack
このオプションは、デュアルスタックネットワークが有効にされていないクラスターの場合には失敗します。デュアルスタックが設定されたクラスターの場合、その値が PreferDualStack に設定されている場合と同じになります。コントロールプレーンは、IPv4 アドレスと IPv6 アドレス範囲の両方からクラスター IP アドレスを割り当てます。

単一スタックに使用する IP ファミリーや、デュアルスタック用の IP ファミリーの順序は、spec.ipFamilies を以下のアレイ値のいずれかに設定して定義できます。

  • [IPv4]
  • [IPv6]
  • [IPv4, IPv6]
  • [IPv6, IPv4]

8.3.3. コマンドラインを使用したサービスの作成

コマンドラインを使用して、サービスを作成し、それを仮想マシンに関連付けることができます。

前提条件

  • サービスをサポートするようにクラスターネットワークを設定しました。

手順

  1. VirtualMachine マニフェストを編集して、サービス作成のラベルを追加します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 1
    # ...
    1
    special: keyspec.template.metadata.labels スタンザに追加します。
    注記

    仮想マシンのラベルは Pod に渡されます。special: キー ラベルは、Service マニフェストの spec.selector 属性のラベルと一致する必要があります。

  2. VirtualMachine マニフェストファイルを保存して変更を適用します。
  3. 仮想マシンを公開するための Service マニフェストを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: example-service
      namespace: example-namespace
    spec:
    # ...
      selector:
        special: key 1
      type: NodePort 2
      ports: 3
        protocol: TCP
        port: 80
        targetPort: 9376
        nodePort: 30000
    1
    VirtualMachine マニフェストの spec.template.metadata.labels スタンザに追加したラベルを指定します。
    2
    ClusterIPNodePort、または LoadBalancer を指定します。
    3
    仮想マシンから公開するネットワークポートとプロトコルのコレクションを指定します。
  4. サービス マニフェストファイルを保存します。
  5. 以下のコマンドを実行してサービスを作成します。

    $ oc create -f example-service.yaml
  6. 仮想マシンを再起動して変更を適用します。

検証

  • Service オブジェクトをクエリーし、これが利用可能であることを確認します。

    $ oc get service -n example-namespace

8.3.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.