web-dev-qa-db-fra.com

comment accéder à distance au tableau de bord du mini-cube kubernetes local

Kubernetes newbie (ou plutôt réseau de base) question: Minikube à nœud unique installé (version 0.23) sur une boîte Ubuntu fonctionnant dans mon LAN (sur l'adresse IP 192.168. 0,20) avec virtualbox.

la commande de démarrage de minikube se termine également avec succès

minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.

le tableau de bord minikube apparaît également avec succès. (exécuté sur 192.168.99.100:30000)

ce que je veux faire, c'est accéder au tableau de bord minikube à partir de mon macbook (fonctionnant sur 192.168.0.11) dans le même réseau local.

Je souhaite également accéder au même tableau de bord de minikube depuis Internet.

Pour l'accès LAN: Maintenant, d'après ce que je comprends, j'utilise virtualbox (l'option vm par défaut), je peux changer le type de réseau (en NAT avec redirection de port) en utilisant la commande vboxnet

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,,22"

comme indiqué ici

Dans mon cas, ce sera quelque chose comme ça

VBoxManage modifyvm "VM name" --natpf1 "guesthttp,http,,30000,,8080"

Suis-je en train de penser dans le bon sens ici?

Aussi pour accéder à distance à la même adresse de tableau de bord minikube, je peux configurer un service de type no-ip.com. Ils ont demandé d'installer leur utilitaire sur linux box et également de configurer la redirection de port dans les paramètres du routeur qui redirigeront du port hôte vers le port invité. C'est à peu près ça? Est-ce que j'ai râté quelque chose?

15
robin bajaj

J'ai pu courir avec quelque chose d'aussi simple que:

kubectl proxy --address='0.0.0.0' --disable-filter=true
23
Jeff Prouty

La façon ssh

En supposant que vous avez ssh sur votre boîte ubuntu.

Première exécution kubectl proxy & pour exposer le tableau de bord sur http://localhost:8001

Exposez ensuite le tableau de bord à l'aide de la redirection de port de ssh, en exécutant:

ssh -R 30000:127.0.0.1:8001 [email protected]

Vous devez maintenant accéder au tableau de bord à partir de votre macbook dans votre réseau local pointant le navigateur vers http://192.168.0.20:30000

Pour l'exposer de l'extérieur, il suffit d'exposer le port 30000 en utilisant no-ip.com, peut-être le changer en un port standard, comme 80.

Notez que ce n'est pas la solution la plus simple mais à certains endroits fonctionnerait sans avoir les droits de superutilisateur;) Vous pouvez automatiser la connexion après le redémarrage de la boîte ubuntu en utilisant un script init et en définissant une clé publique pour la connexion.

@Jeff a fourni la réponse parfaite, a mis plus d'indices pour les débutants.

  1. Démarrez un proxy en utilisant le script de @ Jeff, par défaut, il ouvrira un proxy sur '0.0.0.0:8001'.

    kubectl proxy --address='0.0.0.0' --disable-filter=true
    
  2. Visitez le tableau de bord via le lien ci-dessous:

    curl http://your_api_server_ip:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/
    

Plus de détails s'il vous plaît se référer à officiellement doc .

10
hao

J'ai eu le même problème récemment et l'ai résolu comme suit:

  1. Obtenez votre minikube VM sur le LAN en ajoutant une autre carte réseau en mode réseau bridge. Pour moi, cela a été fait en modifiant le minikube VM = dans l'interface utilisateur de VirtualBox et requis VM stop/start. Je ne sais pas comment cela fonctionnerait si vous utilisez l'hyperkit. Ne détruisez pas les adaptateurs réseau par défaut configurés par minikube: minikube dépend de ceux-ci. https://github.com/kubernetes/minikube/issues/1471
  2. Si vous ne l'avez pas déjà fait, installez kubectl sur votre mac: https://kubernetes.io/docs/tasks/tools/install-kubectl/
  3. Ajoutez un cluster et la configuration associée au ~/.kube/config comme ci-dessous, en modifiant l'adresse IP du serveur pour qu'elle corresponde à votre nouvelle adresse VM IP. Les noms peuvent également être modifiés si vous le souhaitez. Notez que insecure-skip-tls-verify: true est nécessaire car le certificat https généré par minikube n'est valide que pour les adresses IP internes de la machine virtuelle.

    clusters:
    - cluster:
        insecure-skip-tls-verify: true
        server: https://192.168.0.101:8443
      name: mykubevm
    contexts:
    - context:
        cluster: mykubevm
        user: kubeuser
      name: mykubevm
    users:
    - name: kubeuser
      user:
        client-certificate: /Users/myname/.minikube/client.crt
        client-key: /Users/myname/.minikube/client.key
    
  4. Copiez le ~/.minikube/client.* fichiers référencés dans la configuration de votre hôte Linux minikube. Ce sont les fichiers de clés de sécurité requis pour l'accès.

  5. Définissez votre contexte kubectl: kubectl config set-context mykubevm. À ce stade, votre cluster de minikube doit être accessible (essayez kubectl cluster-info).

  6. Courir kubectl proxy http://localhost:8000 pour créer un proxy local pour accéder au tableau de bord. Accédez à cette adresse dans votre navigateur.

Il est également possible de passer à la machine virtuelle minikube. Copiez la paire de clés ssh de ~/.minikube/machines/minikube/id_rsa* dans votre répertoire .ssh (renommer pour éviter de supprimer d'autres clés, par exemple mykubevm & mykubevm.pub). Ensuite ssh -i ~/.ssh/mykubevm docker@<kubevm-IP>

7
AndyB

Légère variation sur l'approche ci-dessus.

J'ai un service Web http avec NodePort 30003. Je le rend disponible sur le port 80 en externe en exécutant:

Sudo ssh -v -i ~/.ssh/id_rsa -N -L 0.0.0.0:80:localhost:30003 ${USER}@$(hostname)

1
user553965

Jeff Prouty a ajouté une réponse utile:

J'ai pu courir avec quelque chose d'aussi simple que:

kubectl proxy --address='0.0.0.0' --disable-filter=true

Mais pour moi, cela n'a pas fonctionné au départ.

J'exécute cette commande sur la machine CentOS 7 avec kubectl en cours d'exécution (IP locale: 192.168.0.20).

Lorsque j'ai essayé d'accéder au tableau de bord à partir d'un autre ordinateur (qui était évidemment en LAN):

http://192.168.0.20:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/

alors seul le délai d'attente était dans mon navigateur Web.

La solution pour mon cas est que dans CentOS 7 (et probablement d'autres distributions), vous devez ouvrir le port 8001 dans le pare-feu de votre système d'exploitation.

Donc, dans mon cas, je dois exécuter dans le terminal CentOS 7:

 Sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent
 Sudo firewall-cmd --reload

Et après ça. Ça marche! :)

Bien sûr, vous devez être conscient que ce n'est pas une solution sûre, car tout le monde a accès à votre tableau de bord maintenant. Mais je pense que pour les tests en laboratoire local, ce sera suffisant.

Dans d'autres distributions Linux, la commande d'ouverture des ports dans le pare-feu peut être différente. Veuillez utiliser Google pour cela.

0
Schakal

Merci pour vos précieuses réponses. Si vous devez utiliser la commande proxy kubectl pour ne pas voir en permanence, utilisez l'objet "Service" ci-dessous dans le fichier YAML capable de voir à distance jusqu'à ce que vous l'arrêtiez. Créez un nouveau fichier yaml minikube-dashboard.yaml et écrire le code manuellement, je ne recommande pas de le copier-coller.

apiVersion : v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-test
  namespace: kube-system
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    app: kubernetes-dashboard
  type: NodePort

Exécutez la commande,

$ Sudo kubectl apply -f minikube-dashboard.yaml

Enfin, ouvrez l'URL: http: // votre-adresse-publique-ip: 30000/#!/Persistentvolume? Namespace = default

0
lakshmikandan