これは未公開の文書です SUSE® Virtual Clusters v1.2.0 (Dev).

ハウツー:仮想クラスターKubernetes APIを公開する

このガイドでは、仮想クラスターのKubernetes APIを外部ネットワークに公開する方法を説明します。この手順は、_仮想モード_と_共有モード_の両方に適用されます。

IPアドレスやホストが拒否されないように、TLS-SAN引数をクラスターに追加することが重要です。

`k3kcli cluster delete clustername`を実行すると、仮想クラスターが削除されますが、以下の方法で作成されたingressやサービスには影響しません。

Ingress

ホスト上に存在するingressコントローラーを通じて、仮想クラスターのKubernetes APIを公開することが可能です。ただし、TLS終端処理は仮想クラスターで行う必要があり、通常のingressオブジェクトからいくつかの変更が必要です。

Traefik

Traefikの場合、仮想クラスターのAPIはIngressRouteTCPリソースを通じて公開されます。こちらが設定の例です:

apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
  name: cluster-ingress-rt
spec:
  entryPoints:
    - websecure
  routes:
    - match: HostSNI(`cluster.example.com`)
      services:
        - name: k3k-clustername-service
          port: 443
  tls:
    passthrough: true

Ingress Nginx

Ingress Nginxは、デフォルトではSSLパススルーが有効になっておらず、--enable-ssl-passthroughフラグを使用して有効にする必要があります。ingress-nginxのドキュメントを参照してください{ こちら

その後、アノテーション「nginx.ingress.kubernetes.io/ssl-passthrough」を持つ通常のingressリソースを作成することが可能です。次に例を示します。

apiVersion: networking.k8s.io
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "https"
  name: cluster-ingress
spec:
  rules:
  - host: cluster.example.com
    http:
      paths:
      - backend:
          service:
            name: k3k-clustername-service
            port:
              number: 443
        path: /
        pathType: Prefix

サービス

仮想クラスターの作成時に作成されたサービスは変更できません。希望するタイプ(LoadBalancerまたはNodePort)の新しいサービスを作成する必要があります。

LoadBalancer

ホストクラスターに利用可能なロードバランサーがある場合、クラウドサービスプロバイダーからのものであれ、MetalLBのようなアドオンからのものであれ、仮想クラスターのAPIを独自のIPアドレスで公開することが可能です。

名前空間_k3k_test_の_test_という例のクラスターに対して、次のコマンドでLoadBalancerサービスを作成します:

kubectl -n k3k_test expose service k3k-test-service --type=LoadBalancer --name=k3k-test-servicelb

NodePort

上記の解決策がない場合、仮想Kubernetes APIはホストノードのいずれかのIPアドレスを使用してNodePortサービスを介して公開できます。

名前空間_k3k_test_の_test_という例のクラスターに対して、次のコマンドを使用してNodePortサービスを作成します:

kubectl -n k3k_test expose service k3k-test-service --type=NodePort --name=k3k-test-servicenp