Kubernetesでは、サービスは、ネットワーク経由でポッドのグループを公開するのに役立つ抽象化です。 サービスは、サービスによって公開されるポッドのドメイン名を提供し、ポッド間の負荷分散を実装します。 このトピックでは、サービスの仕組みとLoadBalancerサービスの設定に関する注意事項について説明します。 このトピックでは、さまざまな種類のサービスを選択してアプリケーションを公開する方法についても説明します。
前提条件
ACKサーバーレスクラスターが作成されます。 詳細については、「ACK Serverlessクイックスタート」をご参照ください。
背景情報
Kubernetesでは、サービスはポッドの論理セットとポッドへのアクセスに使用されるポリシーを定義する抽象化です。 このパターンはマイクロサービスと呼ばれます。 ラベルセレクターは、サービスによってアクセスされるポッドのセットを決定するために使用されます。
Kubernetesクラスターの各ポッドには、独自のIPアドレスがあります。 ただし、ポッドは頻繁に作成および削除されます。 したがって、ポッドを外部アクセスに直接公開することは、高可用性を確保するための規則に準拠しません。 サービスはフロントエンドをバックエンドから切り離します。 フロントエンドクライアントは、どのバックエンドポッドが使用されるかを認識する必要はない。 これは、緩く分離されたマイクロサービスアーキテクチャを提供する。
詳細については、「Kubernetes Services」をご参照ください。
ステップ1: デプロイの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の右上隅にデプロイメントページをクリックします。YAMLから作成する.
サンプルテンプレートを選択するか、カスタムテンプレートを入力し、作成.
この例では、NGINXアプリケーションの展開テンプレートが選択されています。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # replace it with your exactly <image_name:tags> ports: - containerPort: 80 ## Expose this port in the Service.[デプロイメント] ページで、作成したデプロイメントを見つけ、デプロイメントの名前をクリックするか、[操作] 列の [詳細] をクリックして、デプロイメントのステータスを表示します。
手順2: サービスの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[サービス] ページで、[作成] をクリックします。
では、サービスの作成ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
名前
サービスの名前を入力します。
サービスタイプ
サービスのタイプ。 このパラメータは、サービスへのアクセス方法を指定します。 有効な値:
Cluster IP: ClusterIPタイプのサービス。 このタイプのサービスは、クラスターの内部IPアドレスを使用して公開されます。 デフォルト値です。 このオプションを選択すると、クラスター内でのみサービスにアクセスできます。
説明[ヘッドレスサービス] チェックボックスは、[タイプ] を [クラスターIP] に設定した場合にのみ表示されます。 このチェックボックスをオンにすると、ヘッドレスサービスを使用して、Kubernetesでのサービス検出の実装に縛られることなく、他のサービス検出メカニズムとインターフェースできます。
ノードポート: NodePort型サービス。 このタイプのサービスは、各ノードのIPアドレスと静的ポートを使用してアクセスされます。 NodePortサービスを使用して、リクエストをClusterIPサービスにルーティングできます。 ClusterIPサービスは、システムによって自動的に作成されます。
<NodeIP >:< NodePort>にリクエストを送信することで、クラスターの外部からNodePortサービスにアクセスできます。説明このオプションは、ACKクラスターでのみサポートされます。 ACK Serverlessクラスターはこのオプションをサポートしていません。
Server Load Balancer: LoadBalancerタイプのサービス。 このタイプのサービスは、インターネット接続のServer Load Balancer (SLB) インスタンスまたは内部接続のSLBインスタンスを使用して、外部アクセスまたは内部アクセスを有効にします。 LoadBalancerサービスを使用して、トラフィックをNodePortサービスまたはClusterIPサービスにルーティングすることもできます。
SLBインスタンスの作成: [変更] をクリックして、SLBインスタンスの仕様を変更できます。
既存のSLBインスタンスを使用: 既存のSLBインスタンスを選択できます。
説明SLBインスタンスを作成するか、既存のSLBインスタンスを使用できます。 SLBインスタンスを複数のサービスに関連付けることもできます。 ただし、次の制限に注意する必要があります。
既存のSLBインスタンスを使用する場合、SLBインスタンスのリスナーはサービスのリスナーを上書きします。
サービス用に作成されたSLBインスタンスは、他のサービスと共有できません。 SLBインスタンスを使用して他のサービスを公開する場合、SLBインスタンスは削除される可能性があります。 複数のサービスを公開するために使用できるのは、コンソールまたはAPIを呼び出して手動で作成されたSLBインスタンスのみです。
同じSLBインスタンスを共有するKubernetesサービスは、異なるフロントエンドリスナポートを使用する必要があります。 そうでない場合、ポート競合が発生します。
1つのSLBインスタンスを使用して複数のサービスを公開する場合、Kubernetesはリスナー名とvServerグループ名を一意の識別子として使用します。 リスナーまたはvServerグループの名前は変更しないでください。
クラスター間でSLBインスタンスを共有することはできません。
外部トラフィックポリシー
外部トラフィックを分散するポリシーを選択します。 外部トラフィックポリシーの詳細については、「外部トラフィックポリシーの違い」をご参照ください。
Local: サービスがデプロイされているノードのポッドにのみトラフィックをルーティングします。
クラスター: ネットワークトラフィックは、クラスター内の他のノードのポッドにルーティングできます。
説明[外部トラフィックポリシー] パラメーターは、[タイプ] を [ノードポート] または [Server Load Balancer] に設定した場合にのみ使用できます。
バックエンド
サービスに関連付けるバックエンドアプリケーション。 バックエンドアプリケーションを選択しない場合、Endpointオブジェクトは作成されません。 詳細については、「Services-without-selectors」をご参照ください。
ポートマッピング
サービスポートとコンテナーポート。 サービスポートはYAMLファイルの
portフィールドに対応し、コンテナーポートはYAMLファイルのtargetPortフィールドに対応します。 コンテナーポートは、バックエンドポッドで公開されているポートと同じである必要があります。注釈
1つ以上のアノテーションをサービスに追加して、SLBインスタンスの設定を変更します。 [タイプ] ドロップダウンリストから [カスタムアノテーション] または [Alibaba Cloudアノテーション] を選択できます。 たとえば、注釈
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2は、サービスの最大帯域幅を2 Mbit/sに設定します。 これにより、サービスを介して流れるトラフィックの量が制限されます。 アノテーションの詳細については、「アノテーションを使用したCLBインスタンスの設定」をご参照ください。ラベル
サービスに1つ以上のラベルを追加します。 ラベルは、サービスを識別するために使用される。
[作成] をクリックします。
[サービス] ページで、作成したサービスを表示できます。
[サービス] ページで、サービスをクリックして詳細を表示するか、サービスの [操作] 列の [更新] または [削除] をクリックして、サービスを更新または削除できます。
説明サービスの詳細ページで、[外部エンドポイント] の右側にあるハイパーリンクをクリックして、バックエンドアプリケーションにアクセスできます。