CISを用いたオンプレミスKubernetesクラスタのService公開について - Part 1

はじめに

外部からKubenetesクラスタ内のServiceへのアクセスを設定する場合、外部ロードバランサを用いるのが一般的です。
例えばGoogle社のGoogle Kubernetes Engine(GKE)では、以下の方法にてServiceが公開可能となっています。

- Google CloudのL7 Loadbalancerを用いてKuberentes Serviceへ負荷分散する方法
- Google CloudのL4 Loadbalancerを用いてNGINX Ingress Contollerへ負荷分散を行い、
  Ingress ControllerからKubernetes Serviceへ負荷分散する方法
*Serviceに対するGoogle Cloud LoadBalancnerへのIPアドレスの割り当ては自動的に実施されます

[参考] HTTP(S) 負荷分散用 GKE Ingress
https://cloud.google.com/kubernetes-engine/docs/concepts/ingress?hl=ja

ではオンプレミス環境でKubernetesクラスタを構築する場合はどうでしょうか。
マネージドKubernetesサービスと同等のService公開を行いたい場合、
Kubernetes側のリソースと連携を行う機能を持つロードバランサを使用する必要があります。
本記事では同機能を提供するためのソリューションであるBIG-IP Container Ingress Service(CIS)を解説します。

BIG-IP CISとは?

CISは、KubernetesまたはOpenShift内のPodとして動作するBIG-IPとのコネクタです。
Kubernetesクラスタ内の公開Serviceに変更があった場合、BIG-IPにAPIで通知する事でロードバランサの設定を動的に更新します。

CISの環境要件

CISの環境要件は以下となります。

その他の要件
・Openshift/Kubernetesクラスタが動作していること
・AS3 3.18+がBIG-IPにインストールされていること
 インストール手順は以下のドキュメントをご参照下さい。

Downloading and installing the AS3 package
https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/userguide/installation.html

CISデプロイ手順

手順1. BIG-IP上にPartitionを作成
System -> Users -> Partition Listから任意の名前でPartitionを作成します。

手順2. BIG-IP上のAdmin Credentialをsecretとして設定
以下のコマンドでBIG-IP上のAdmin Credentialをsecretとして設定します。
<secret>はお客様の環境に合わせたパスワードをご入力下さい。

kubectl create secret generic bigip-login -n kube-system --from-literal=username=admin --from-literal=password=<password>

手順3. CIS用のService Account/ClusterRole/ClusterRoleBindingを作成
Helmを利用してインストールを進めるため、CISのChartリポジトリを追加します。
Helmがインストールされていない場合は、下記の手順を元にインストールを実施した上で進めて下さい。

Installing Helm
https://helm.sh/docs/intro/install/

# helm repo add f5-stable https://f5networks.github.io/charts/stable

以下のコマンドでHelmチャートをインストールします。

# helm install -f values.yaml <任意のチャート名> f5-stable/f5-bigip-ctlr

values.yamlファイルは以下の内容で設定して下さい。
bigip_url       : BIG-IPのIPアドレス、またはホスト名を入力して下さい。
bigip_partition   : 手順1で設定したBIG-IPのPartition名を入力して下さい。

bigip_login_secret: bigip-login
rbac:
  create: true
serviceAccount:
  create: true
  name:
ingressClass:
  create: true
  ingressClassName: f5
  isDefaultIngressController: true
namespace: kube-system
args:
  bigip_url: 172.28.14.104
  bigip_partition: kubernetes
  insecure: true
image:
  user: f5networks
  repo: k8s-bigip-ctlr
  pullPolicy: Always
resources: {}
version: latest


まとめ

以上の手順でCISのデプロイは完了となります。
次回の記事では、実際にServiceをIngressで外部公開するための手順を解説していきます。

Updated Sep 29, 2022
Version 2.0
No CommentsBe the first to comment