Kubernetes では、Pod はエフェメラルであり、その IP アドレスは安定していません。Service は、安定した IP アドレスを提供し、バックエンド Pod の論理的なセットにトラフィックをルーティングすることで、クライアントを個々の Pod のライフサイクルから切り離します。ACS コンソールまたは kubectl CLI を使用して Service を作成し、公開できます。
方法1:コンソールを使用した Service の作成
ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。
クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、ネットワーク > サービス を選択します。
-
Services ページで、Create をクリックします。Create Service ダイアログボックスで、Service のパラメーターを設定します。
パラメーター
説明
例
[名]
Service の名前です。
my-nginx-svc
[サービスタイプ]
Service のアクセス方法です。次のタイプが使用可能です:
-
Cluster IP:クラスター内部の IP アドレスで Service を公開します。Service はクラスター内からのみアクセスできます。
説明Cluster IP を選択すると、ヘッドレスサービス を設定できます。ヘッドレスサービスを使用すると、Kubernetes の実装に縛られることなく、他のサービスディスカバリーメカニズムと統合できます。
-
Server Load Balancer:Alibaba Cloud のクラシックロードバランサー (CLB) インスタンスを使用して Service を公開します。Public Access または Internal Access を選択できます。CLB は、Service の ClusterIP にトラフィックをルーティングします。
-
リソースの新規作成:[Pay-by-specification] を選択した場合、仕様の変更 をクリックして CLB の仕様を変更できます。
-
既存のリソースを使用:リストから既存の CLB インスタンスを選択できます。
説明-
既存の CLB インスタンスを使用すると、その既存のリスナーが上書きされます。
-
Service によって作成された CLB インスタンスは再利用できず、誤って削除される可能性があります。
-
コンソールで手動で作成した、または API を呼び出して作成した CLB インスタンスのみが再利用できます。
-
複数の Service が同じ CLB インスタンスを再利用する場合、ポートの競合を避けるために、フロントエンドのリスナーポートが異なることを確認してください。
-
CLB インスタンスはクラスター間で再利用できません。
-
[Create Service]:
-
サービスタイプ: LoadBalancer
-
SLB タイプ: Classic Load Balancer (CLB)
-
リソースの選択: Create Resource
CLBリソースの作成:
-
アクセス方法: internal access
-
その他の設定にはデフォルト値を使用します。
[バックエンド]
Service からのトラフィックを受信するバックエンドアプリケーションです。バックエンドを選択しない場合、Kubernetes は対応する Endpoints オブジェクトを作成しません。詳細については、セレクターのないServiceをご参照ください。
-
Name: app
-
Value: nginx
[ポートマッピング]
サービスポート (Service YAML の
portフィールド) とコンテナポート (Service YAML のtargetPortフィールド) を追加します。コンテナポートは、バックエンド Pod によって公開されるポートと一致する必要があります。-
Service Port: 80
-
Container Port: 80
-
Protocol: TCP
[Annotations]
アノテーションを追加して、Service の ClusterIP または LoadBalancer リソースを設定します。
説明Alibaba Cloud 固有のアノテーションは、サービスタイプ が Server Load Balancer に設定されている場合にのみ有効になります。たとえば、アノテーション
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2は、Service のピーク帯域幅を 2 Mbit/s に設定してトラフィックを制御します。アノテーションの完全なリストについては、「アノテーションを使用したクラシックロードバランサー (CLB) の設定」をご参照ください。なし
[Label]
Service を識別するためのラベルを追加します。
なし
パラメーターを設定した後、OK をクリックします。
-
-
Service が作成されると、Services ページで
my-nginx-svcという名前の新しい Service を確認できます。
方法2:kubectl を使用した Service の作成
-
my-nginx-svc.yaml という名前のファイルを作成し、次の内容を記述します。
フィールド
説明
kindリソースオブジェクトのタイプを Service として定義します。
metadataService の名前、ラベル、名前空間などの基本情報を定義します。
metadata.annotationsACS は、LoadBalancer タイプの Service を設定するための豊富なアノテーションセットを提供します。この例では、アノテーション
service.beta.kubernetes.io/alicloud-loadbalancer-address-typeはintranet(内部アクセス) を指定します。その他のアノテーションについては、「アノテーションを使用したクラシックロードバランサー (CLB) の設定」をご参照ください。spec.selectorService のラベルセレクターです。Service はこれらのラベルを持つ Pod と一致し、それらにトラフィックをルーティングします。
spec.ports.portService の ClusterIP で公開されるポートです。クラスター内のクライアントは、
clusterIP:portで Service にアクセスします。spec.ports.targetPortバックエンド Pod のポートです。
portに到着したトラフィックは、kube-proxy によってバックエンド Pod のtargetPortに転送されます。spec.typeService がどのように公開されるかを指定します。
-
LoadBalancer:Alibaba Cloud CLB インスタンスを使用して Service を公開します。Service に既存の CLB インスタンスを指定しない場合、デフォルトでパブリックアクセス用の CLB インスタンスが作成されます。内部アクセスを持つ Service と対応するプライベート CLB を作成するには、service.beta.kubernetes.io/alicloud-loadbalancer-address-typeアノテーションをintranetに設定します。 -
ClusterIP:クラスター内部の IP アドレスで Service を公開し、クラスター内からのアクセスを可能にします。
重要Container Compute Service (ACS) は、NodePort タイプの Service をサポートしていません。このタイプの Service を作成しようとすると、失敗するか、Service が有効になりません。
-
-
次のコマンドを実行して、Service を作成します:
kubectl apply -f my-nginx-svc.yaml -
次のコマンドを実行して、Service が作成されたことを確認します:
kubectl get svc my-nginx-svc実行結果の例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.16.XX.XX 192.168.XX.XX 80/TCP 13s
関連操作
Serviceの更新
-
方法1:既存の Service を直接編集するには、次のコマンドを実行します。これにより、Service の設定がデフォルトのエディターで開かれます。
kubectl edit service my-nginx-svc -
方法2:マニフェストファイルから Service を更新するには、ローカルの YAML ファイルを変更して変更を適用します。
kubectl apply -f my-nginx-svc.yaml
Serviceの表示
次のコマンドを実行して、Service の詳細を表示します:
kubectl get service my-nginx-svc
実行結果の例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.16.XX.XX 192.168.XX.XX 80/TCP 13s
Serviceの削除
次のコマンドを実行して、Service を削除します:
kubectl delete service my-nginx-svc