コンテナ化されたアプリケーションの公開

Compute Cloud@Customerの外部からワーカー・ノード・アプリケーションにアクセスできるように、アプリケーション・デプロイメントを公開するには、次を実行します:

  • 外部ロード・バランサを作成します。

  • 必要に応じてイングレスおよびエグレス・ルールを更新して、コンテナ化されたアプリケーションのポート要件をサポートします。たとえば、TCPポート3000を使用するアプリケーションがある場合は、ポート3000でイングレス・ルールを追加する必要があります。

外部ロード・バランサの作成

外部ロード・バランサは、LoadBalancerタイプのサービスです。このサービスは、複数の実行中のインスタンスがあるアプリケーションのロード・バランシングを提供します。

--service-lb-defined-tagsまたは--service-lb-flexible-tagsオプションを使用して、外部ロード・バランサに適用されるタグを指定する場合は、該当する動的グループに次のポリシーが含まれていることを確認してください。クラスタ動的グループおよびポリシーの作成を参照してください。

allow dynamic-group dynamic-group-name to use tag-namespaces in compartment compartment-name

ロード・バランサのシェイプ・パラメータに次のいずれかの値があることを確認します:

  • 400Mbps
  • flexibleflex-minおよびflex-max注釈も指定する必要があります。

ロード・バランサのシェイプ値を変更するために、アプリケーション・デプロイメント・ファイルの編集が必要になる場合があります。これらの値の設定方法の詳細および例は、代替Load Balancerシェイプの指定およびフレキシブルLoad Balancerシェイプの指定を参照してください。

プライベート・クラスタ(プライベート・ワーカー・ロード・バランサ・サブネットを持つクラスタ)にサービス・ロード・バランサを作成するには、外部ロード・バランサ・テンプレートで次の注釈を使用します:

service.beta.kubernetes.io/oci-load-balancer-internal: "true"

次のコマンドを使用して、外部ロード・バランサを作成します。

# kubectl create -f expose_lb

expose_lbファイルのコンテンツは、次のとおりです。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-shape: "400Mbps"
spec:
  type: LoadBalancer
  ports:
   - port: 80
  selector:
    app: nginx

次のコマンドは、この外部ロード・バランサの詳細を表示します。LoadBalancerイングレスIPアドレスは、Compute Cloud@Customerの外部からノード・アプリケーションにアクセスするために使用されるIPアドレスです。Compute Cloud@Customerコンソールでは、LoadBalancerイングレスIPアドレスが、ロード・バランサの詳細ページの最初の列の下部にある「IPアドレス」という見出しの下に表示され、その後に「(パブリック)」というラベルが付きます。

# kubectl describe svc my-nginx-svc
Name:                     my-nginx-svc
Namespace:                default
Labels:                   app=nginx
Annotations:              oci.oraclecloud.com/load-balancer-type: lb
                          service.beta.kubernetes.io/oci-load-balancer-shape: 400Mbps
Selector:                 app=nginx
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       IP_address
IPs:                      IP_address
LoadBalancer Ingress:     Load_Balancer_IP_address
Port:                     <unset> 80/TCP
TargetPort:               80/TCP
NodePort:                 <unset> 32145/TCP
Endpoints:                IP_address:port, IP_address+1:port, IP_address+2:port
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age    From                Message
  ----
  Normal  EnsuringLoadBalancer  7m48s  service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   6m40s  service-controller  Ensured load balancer

トラフィック・ポリシーの詳細は、「クライアント・ソースIPの保持」を参照してください。

次のコマンドを使用して、外部ロード・バランサのIPアドレスおよびポートをリストします:

# kubectl get svc
NAME          TYPE          CLUSTER-IP  EXTERNAL-IP               PORT(S)       AGE
kubernetes    ClusterIP     IP_address  <none>                    443/TCP       6h17m
my-nginx-svc  LoadBalancer  IP_address
         Load_Balancer_IP_address  80:32145/TCP  5h5m

次の手順:

コンテナ化されたアプリケーションのストレージの追加