Oracle Container Engine for KubernetesでLoadBlancerタイプのServiceを使う

このエントリーはOracle Cloud アドベントカレンダーその2の21日目です。

今回は、OKE(Oracle Container Engine for Kubernetes)で作ったKubernetesクラスターでLoadBalancerタイプのServiceを使う手順を紹介します。

0. 前提条件

  • OKEのクラスターをプロビジョング済みであること。手順はこちらをご参照ください。

1. 手順

ほとんどのマネージドKubernetesサービスは、自身のクラウド環境で提供されているロードバランサーのサービスと連携してServiceオブジェクトを作成する機能を提供しており、OKEも同様です。

1.1. まずはデフォルト設定で

まずは、my-nginx.yamlというファイル名で以下のような内容のファイルを作成します。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

これはなんの変哲もない、nginxのコンテナを公開するだけのmanifestファイルです。

これをOKEクラスターに適用してみます。

kubectl apply -f my-nginx.yaml

10-20秒程度おいてから以下のコマンドを実行し、Serviceオブジェクトの内容を確認してみます。

k get svc
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
kubernetes     ClusterIP      10.96.0.1       <none>           443/TCP        15m
my-nginx-svc   LoadBalancer   10.96.122.251   129.213.78.183   80:32250/TCP   30s

my-nginx-svcというServiceが129.213.78.183というIPアドレスで公開されていることがわかります(IPアドレスは環境や実行の度に変わります)。

ブラウザでこのアドレスhttp://129.213.78.183/アクセスすると、OKEクラスターで動いているnginxからの応答を得ることができます。

f:id:charlier_shoe:20181221162747p:plain

Oracle Cloud Infrastructureのコンソールでロードバランサーの方を確認してみると、ランダムに生成されたと思しき名前でロードバランサーが作られていることがわかります。

f:id:charlier_shoe:20181221162759p:plain

IPアドレスは先程のアドレス一致します。また、シェイプは[100]Mbpsになっていると思います。

Oracle Cloud Infrastructureでは400[Mbps]と8000[Mbps]も提供しています。これらを使いたい場合には、Serviceオブジェクトの記述にannotationを追加します。

  • 400[Mbps]
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:                                                  <--ココ
    service.beta.kubernetes.io/oci-load-balancer-shape: 400Mbps <--ココ
...(以下略)...
  • 8000[Mbps]
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:                                                   <--ココ
    service.beta.kubernetes.io/oci-load-balancer-shape: 8000Mbps <--ココ
...(以下略)...

例えば400[Mbpx]でやってみます。ファイルを変更後、以下のコマンドを実行します。

kubectl delete -f my-nginx.yaml
kubectl create -f my-nginx.yaml

今度は400[Mbps]のロードバランサーができました!(ロードバランサーの作り直しになるので、IPアドレスも変わっています)

f:id:charlier_shoe:20181221162831p:plain

本エントリーでご紹介する内容は以上です。

シェイプを変更する以外にもSSLを終端するように設定したりすることも可能です。詳しくは公式のドキュメントを参照してください。