Il s'agit d'une documentation non publiée pour SUSE® Virtual Clusters v1.2.0 (Dev).

Procédure : Exposer l’API Kubernetes du cluster virtuel

Ce guide explique comment exposer l’API Kubernetes des clusters virtuels aux réseaux externes. Les pratiques s’appliquent à la fois au mode virtuel et au mode partagé.

Il est important d’ajouter les arguments TLS-SAN au cluster, afin que l’adresse IP ou l’hôte ne soit pas rejeté.

Exécuter k3kcli cluster delete clustername supprimera le cluster virtuel mais ne se propagera pas aux ingresses ou services créés en utilisant les méthodes suivantes.

Ingress

Il est possible d’exposer l’API Kubernetes du cluster virtuel via un contrôleur d’ingress présent sur l’hôte. Cependant, il est important de noter que la terminaison TLS doit être effectuée au niveau du cluster virtuel, nécessitant quelques modifications par rapport aux objets d’ingress normaux.

Traefik

Dans le cas de Traefik, l’API du cluster virtuel est exposée via une ressource IngressRouteTCP. Voici un exemple de configuration :

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 n’a pas le passthrough SSL activé par défaut et doit être activé avec le drapeau --enable-ssl-passthrough. Consultez la documentation d’ingress-nginx { ici.

Ensuite, il est possible de créer une ressource d’ingress normale avec l’annotation "nginx.ingress.kubernetes.io/ssl-passthrough". Par exemple :

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

Service

Les services créés au moment de la création du cluster virtuel ne peuvent pas être modifiés. Il est nécessaire de créer un nouveau service du type souhaité (LoadBalancer ou NodePort).

LoadBalancer

Si un équilibreur de charge est disponible pour le cluster hôte, soit d’un fournisseur de services cloud, soit d’un produit complémentaire tel que MetalLB, il est possible d’exposer l’API du cluster virtuel via sa propre adresse IP unique.

Pour un cluster d’exemple appelé test dans l’espace de noms k3k_test, créez un service LoadBalancer avec la commande suivante :

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

NodePort

En l’absence des solutions ci-dessus, l’API Kubernetes virtuelle peut être exposée via un service NodePort en utilisant l’adresse IP de l’un des nœuds hôtes.

Pour un cluster d’exemple nommé test dans l’espace de noms k3k_test, créez un service NodePort en utilisant la commande suivante :

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