web-dev-qa-db-fra.com

Comment exposer des conteneurs microk8s, de sorte qu'ils sont disponibles dans une autre machine?

J'aimerais utiliser microk8s pour la lecture autour du flux de données de nuage de printemps, j'ai donc installé MultiPass sur ma fenêtre 10 et dans une machine virtuelle, j'exécute un Ubuntu où Microk8S est installé. J'aimerais y arriver, tous les conteneurs exécutés sur Ubuntu, qui est une Virtualbox sans tête VM géré par multiparas, mais j'aimerais pouvoir se connecter aux conteneurs de Windows.

La topologie ressemble à ceci:

Windows 10 :

  • 192.168.1.107 fourni par mon routeur à domicile

Ubuntu qui fonctionne dans VirtualBox

  • 192.168.52.1 fourni par, je pense que Windows pour VirtualBox (réseau hôte VirtualBox)

Si je me connecte à Ubuntu ifconfig dit ce qui suit:

multipass@scdf:~/scdf/spring-cloud-dataflow$ ifconfig                                                                                                                               
cbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500                                                                                                                                  
        inet 10.1.1.1  netmask 255.255.255.0  broadcast 0.0.0.0                                                                                                                             
        inet6 fe80::c802:9fff:fea2:93f1  prefixlen 64  scopeid 0x20<link>                                                                                                                   
        ether ca:02:9f:a2:93:f1  txqueuelen 1000  (Ethernet)                                                                                                                                
        RX packets 19890  bytes 6628126 (6.6 MB)                                                                                                                                            
        RX errors 0  dropped 0  overruns 0  frame 0                                                                                                                                         
        TX packets 21413  bytes 13988665 (13.9 MB)  

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0                                                                                                                  
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:feba:30bb  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ba:30:bb  txqueuelen 1000  (Ethernet)
        RX packets 208972  bytes 273941063 (273.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24249  bytes 2084939 (2.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<Host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 157483  bytes 40950239 (40.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 157483  bytes 40950239 (40.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

microk8s.kubectl get all dit ce qui suit, il a été exécuté à Ubuntu:

multipass@scdf:~/scdf/spring-cloud-dataflow$ microk8s.kubectl get all
NAME                                          READY   STATUS    RESTARTS   AGE
pod/default-http-backend-5d5ff5d4f5-6ttvd     1/1     Running   1          29m
pod/kafka-broker-64445d8596-88rl6             1/1     Running   24         98m
pod/kafka-zk-77bdb5bcbb-qjxfh                 1/1     Running   4          98m
pod/mysql-bdd598966-nknwk                     0/1     Pending   0          87m
pod/nginx-ingress-microk8s-controller-dh28n   1/1     Running   1          29m


NAME                           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/default-http-backend   ClusterIP      10.152.183.57    <none>        80/TCP                       29m
service/kafka                  ClusterIP      10.152.183.194   <none>        9092/TCP                     98m
service/kafka-zk               ClusterIP      10.152.183.80    <none>        2181/TCP,2888/TCP,3888/TCP   98m
service/kubernetes             ClusterIP      10.152.183.1     <none>        443/TCP                      100m
service/mysql                  ClusterIP      10.152.183.113   <none>        3306/TCP                     87m
service/scdf-server            LoadBalancer   10.152.183.122   <pending>     80:32548/TCP                 80m
service/skipper                LoadBalancer   10.152.183.163   <pending>     80:30955/TCP                 81m

NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>          29m

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/default-http-backend   1/1     1            1           29m
deployment.apps/kafka-broker           1/1     1            1           98m
deployment.apps/kafka-zk               1/1     1            1           98m
deployment.apps/mysql                  0/1     1            0           87m
deployment.apps/scdf-server            0/1     0            0           80m
deployment.apps/skipper                0/1     0            0           82m

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/default-http-backend-5d5ff5d4f5   1         1         1       29m
replicaset.apps/kafka-broker-64445d8596           1         1         1       98m
replicaset.apps/kafka-zk-77bdb5bcbb               1         1         1       98m
replicaset.apps/mysql-bdd598966                   1         1         0       87m
replicaset.apps/scdf-server-6988d7795f            1         0         0       80m
replicaset.apps/skipper-5957946bf5                1         0         0       82m

Comme vous pouvez le voir, il y a deux <Pending> Statut des adresses IP externes. Je crois que ceux-ci devraient être exposés afin de pouvoir se connecter.

J'ai fait ce que j'ai trouvé dans ceci Aide, mais je n'ai pas pu atteindre ce serveur obtient une adresse IP externe.

Qu'est-ce que je fais ici mal? Microk8 est-il capable d'exposer ses conteneurs?

7
AndrasCsanyi

Vous avez raison, si vous souhaitez vous connecter à votre cluster à partir de l'extérieur, vous devez exposer le service comme LoadBalancer ou NodePort.

Malheureusement, comme vous n'utilisez aucun fournisseur de cloud qui prend en charge LoadBalancer (comme AWS ou GCP qui fournit des IPS externes), vous ne pouvez pas exposer le service comme LoadBalancer (service bloqué sur Pending état). Comme décrit ici :

LoadBalancer: expose le service à l'extérieur à l'aide d'un équilibreur de charge d'un fournisseur de cloud. Les services de NODEPORT et de Clusterip, auxquels les itinéraires d'équilibreur de charge externes sont créés automatiquement.

Par défaut dans MICROK8S, vous pouvez utiliser uniquement des services tels que NodePort et ClusterIP.

Avec votre configuration, vous pouvez utiliser NodePort, ClusterIP avec Ingress ou metallb. Si vous utilisez Ingress, vous devez vous rappeler d'activer ingress et dns addons dans Microk8s. Cela peut être don par $ microk8s.enable dns ingress.

Bref. Options que vous avez sont:

  1. Utilisez NodePort
  2. Utilisez Contrôleur d'entrée
  3. Définissez Endpoints dans votre YAMLS ou UTILISATION Metallb et points d'extrémité de points.

De plus, vous pouvez vérifier des cas similaires ici et ici .

J'espère que ça aide.

3
PjoterS