Kubernetes では、Pod は迅速に作成および削除され、その IP アドレスは固定されていません。このため、サービスを直接提供するには適していません。Service は安定した IP アドレスを提供し、外部クライアント (フロントエンド) が特定の IP アドレスを知らなくてもバックエンド Pod にアクセスできるようにします。これにより、フロントエンドとバックエンドが分離され、サービスの安定性が確保されます。このトピックでは、コンソールで ClusterIP サービスを作成する方法について説明します。
背景情報
Kubernetes において、Service は Pod の論理的なセットと、その Pod にアクセスするために使用されるポリシーを定義する抽象化です。このパターンはマイクロサービスとして知られています。ラベルセレクターは、Service によってアクセスされる Pod のセットを決定するために使用されます。
Kubernetes クラスター内の各 Pod は、独自の IP アドレスを持っています。しかし、Pod は頻繁に作成および削除されます。したがって、Pod を外部アクセスに直接公開することは、高可用性を確保するためのルールに準拠していません。Service はフロントエンドとバックエンドを分離します。フロントエンドクライアントは、どのバックエンド Pod が使用されているかを意識する必要はありません。これにより、疎結合のマイクロサービスアーキテクチャが提供されます。
詳細については、「Kubernetes Services」をご参照ください。
ステップ 1: デプロイメントの作成
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[YAML から作成] をクリックします。
サンプルテンプレートまたはカスタムテンプレートを選択し、[作成] をクリックします。
このサンプルテンプレートは Nginx デプロイメント用です。
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx-svc namespace: default spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80[デプロイメント] ページで、対象のアプリケーションの名前または [操作] 列の [詳細] をクリックして、デプロイメントのステータスを表示します。すべての Pod インスタンスが利用可能になるまで待ちます。
ステップ 2: サービスの作成
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。
[サービス] ページで、右上隅にある [作成] をクリックします。[サービスの作成] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
設定項目
説明
例
名前
サービスの名前。
my-nginx-svc
タイプ
[ClusterIP] を選択します。このタイプは、クラスター内部 IP アドレスでサービスを公開します。このタイプを選択した場合、サービスはクラスター内からのみアクセス可能です。これはデフォルトのサービスタイプです。
説明必要に応じて [ヘッドレスサービス] を有効にできます。この機能を有効にすると、ヘッドレスサービスを使用して、Kubernetes の実装に縛られることなく、他のサービス検出メカニズムと連携できます。
ClusterIP
関連付け
サービスをアタッチするバックエンドアプリケーションを選択します。サービスをバックエンドに関連付けないと、Endpoint オブジェクトは作成されません。サービスの関連付けの詳細については、「services-without-selectors」をご参照ください。
名前: app
値: nginx
ポートマッピング
サービスポート (Service YAML ファイルの
portに対応) とコンテナーポート (Service YAML ファイルのtargetPortに対応) を追加します。コンテナーポートは、バックエンド Pod によって公開されるポートと同じである必要があります。サービスポート: 80
コンテナーポート: 80
プロトコル: TCP
アノテーション
サービスにアノテーションを追加します。
なし
ラベル
サービスを識別するためのラベルを追加します。
なし
サービスが作成された後、[サービス] ページでサービスを見つけ、[操作] 列の [更新]、[YAML の編集]、または [削除] をクリックできます。