KubernetesクラスタをOracle Container Engine for Kubernetes (通常はOKE)で実行している場合、Traefikのようなイングレス・コントローラをインストールする(または追加する)のではなく、タイプLoadBalancer
のService
を作成することで、Oracle Cloud Infrastructureでロード・バランサを自動的にプロビジョニングできます。
OKE Kubernetesワーカー・ノードには、通常、パブリックIPアドレスはありません。 つまり、オペレータが作成したNodePort
サービスは、ワーカー・ノードのプライベートIPアドレスでのみポートを公開し、クラスタの外部からはアクセスできないため、使用できません。
かわりに、Oracle Cloud Infrastructureロード・バランサを使用して、OKEで実行されているサービスへのアクセスを提供できます。
また、必要に応じて、Oracle Cloud Infrastructureロード・バランサでKubernetesクラスタ内で実行されているイングレス・コントローラにトラフィックをルーティングし、そのイングレス・コントローラでトラフィックをクラスタ内のサービスにルーティングすることも可能です。
オペレータがドメインを作成すると、WebLogic Server管理サーバーおよび各管理対象サーバーとクラスタ用のサービスを含む、多数のKubernetesサービスがオペレータによって作成されます。
次の例では、bob
ネームスペースにbobs-bookstore
というドメインがあります。 このドメインには、ポート31111
でトラフィックを公開するcluster-1
と呼ばれるクラスタがあります。
次のKubernetes YAMLファイルは、同じネームスペースに新しいService
を定義します。 selector
は、オペレータによってこれらのポッドに配置された注釈を使用して、クラスタcluster-1
の一部であるこのネームスペース内のすべてのポッドをターゲットにします。 また、ポートとプロトコルも定義します。
ロード・バランサのシェイプを指定する場合は、オプションのoci-load-balancer-shape
注釈を含めることができます(図を参照)。 それ以外の場合は、デフォルトのシェイプ(100Mbps)が使用されます。
apiVersion: v1
kind: Service
metadata:
name: bobs-bookstore-oci-lb-service
namespace: bob
annotations:
service.beta.kubernetes.io/oci-load-balancer-shape: 400Mbps
spec:
ports:
- name: http
port: 31111
protocol: TCP
targetPort: 31111
selector:
weblogic.clusterName: cluster-1
weblogic.domainUID: bobs-bookstore
sessionAffinity: None
type: LoadBalancer
このYAMLファイルをクラスタに適用すると、新しいサービスが作成されますが、最初は外部IPが<pending>
として表示されます。
$ kubectl -n bob get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bobs-bookstore-admin-server ClusterIP None <none> 8888/TCP,7001/TCP,30101/TCP 9d
bobs-bookstore-admin-server-ext NodePort 10.96.224.13 <none> 7001:32401/TCP 9d
bobs-bookstore-cluster-cluster-1 ClusterIP 10.96.86.113 <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-managed-server1 ClusterIP None <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-managed-server2 ClusterIP None <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-oci-lb-service LoadBalancer 10.96.121.216 <pending> 31111:31671/TCP 9s
短時間(通常は1分未満)の後、Oracle Cloud Infrastructureロード・バランサがプロビジョニングされ、外部IPアドレスが表示されます:
$ kubectl -n bob get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bobs-bookstore-admin-server ClusterIP None <none> 8888/TCP,7001/TCP,30101/TCP 9d
bobs-bookstore-admin-server-ext NodePort 10.96.224.13 <none> 7001:32401/TCP 9d
bobs-bookstore-cluster-cluster-1 ClusterIP 10.96.86.113 <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-managed-server1 ClusterIP None <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-managed-server2 ClusterIP None <none> 8888/TCP,8001/TCP,31111/TCP 9d
bobs-bookstore-oci-lb-service LoadBalancer 10.96.121.216 132.145.235.215 31111:31671/TCP 55s
これで、外部IPアドレスとポートを使用してポッドにアクセスできます。 より高度なロード・バランシング動作を構成するために使用できるオプションがいくつかあります。 SSLサポートの構成方法、内部および外部サブネットのサポート方法などの詳細は、「Oracle Cloud Infrastructureのドキュメント」を参照してください。