Ich möchte herausfinden, ob ich mit lokalem (Mac) kubectl eine Verbindung zu einem Remote-Minikube-Cluster (Ubuntu-Box) herstellen kann. Ich verwende derzeit Docker und kann dies ganz einfach mit tun docker-machine
. Führen Sie einfach eine Auswertung zum Computernamen durch, und Docker verwendet den Remote-Computer.
Ich habe mich gefragt, ob es etwas Ähnliches für Minikube/Kubectl gibt. Ich habe ein paar Artikel gefunden, in denen erwähnt wird, dass ich mein Remote-Verzeichnis in mein lokales Verzeichnis kopieren ~/.minikube
und einige Konfigurationen ändern muss. Aber das scheint ziemlich kompliziert für etwas, was ein Tool wie dieses docker-machine
problemlos erledigt.
Gibt es ein ähnliches Tool, oder könnte mir, falls nicht, jemand bei den erforderlichen Schritten für die Verbindung mit einem Remote-Cluster helfen?
Remote-Computer
Derzeit verwende ich den docker
Treiber (dies ist die vollständige Ausgabe des Befehls, nur die eine Zeile):
$ minikube config view
- driver: docker
Und verfügen über eine Reihe von NodePort
Dienstleistungen:
$ kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default apigateway NodePort 10.100.122.255 <none> 8080:30601/TCP 19h
default discoveryserver NodePort 10.101.106.231 <none> 8761:30602/TCP 19h
default elasticsearch NodePort 10.97.197.14 <none> 9200:30604/TCP 19h
default harness NodePort 10.97.233.245 <none> 9090:30603/TCP 19h
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h
default mongo NodePort 10.97.172.108 <none> 27017:32625/TCP 19h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 19h
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/meanwhileinhell/.minikube/ca.crt
server: https://192.168.50.2:8443 <<<<<< `minikube ip`
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/meanwhileinhell/.minikube/profiles/minikube/client.crt
client-key: /home/meanwhileinhell/.minikube/profiles/minikube/client.key
Lokale Maschine
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
- cluster:
certificate-authority: /Users/mih.mac/remote/.minikube/ca.crt
server: https://192.168.1.5:8443 <<<<<< Static IP of my remote machine
name: minikube
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
- context:
cluster: minikube
user: minikube
name: minikube
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: minikube
user:
client-certificate: /Users/mih.mac/remote/.minikube/client.crt
client-key: /Users/mih.mac/remote/.minikube/client.key
Antwort1
Es ist kein Tool verfügbar. Der Fernzugriff auf Minikube erfolgt über SSH-Tunneling.
1- Sie müssen in der Lage sein, vom Mac per SSH auf die Ubuntu-Box zuzugreifen.
2- Fügen Sie entsprechende SSH-Portweiterleitungsflags hinzu. Führen Sie den folgenden Befehl aus
ssh -N -p 22 <user>@<public_ip> -L 127.0.0.1:18443:<minikube_ip>:8443
Wo:
Benutzer ist Ihr Name
public_ip ist die öffentliche IP Ihres Servers
minikube_ip ist die IP-Adresse von Minikube. Sie können sie auf dem Server mit dem Befehl „minikube ip“ finden. Wahrscheinlich lautet sie 192.168.49.2.
3- Geben Sie dann einfach die entsprechenden K8s-Anmeldeinformationen in kubectl auf dem Mac ein.
Weitere Informationen finden Sie unter dem Link:
https://www.zepworks.com/posts/access-minikube-remotely-kvm/ https://www.chevdor.com/post/2021/02/docker_to_k8s/
Antwort2
Schritte zum Herstellen einer Verbindung mit einem Remote-Minikube-Cluster von kubectl aus:
- Erstellen Sie einen Minikube-Cluster, der auf einer öffentlichen Schnittstelle lauscht, und fügen Sie einem generierten Zertifikat einen Remote-Hostnamen und/oder IP-Adressen hinzu
minikube start --listen-address=0.0.0.0 --apiserver-names=example.com --apiserver-ips=1.2.3.4
- verwenden
docker ps
, um einen öffentlichen Port für den API-Server zu erhalten – er sollte auf einen Port 8443 im Minikube-Container verweisen (es wird so aussehen0.0.0.0:32774->8443/tcp
– der Port ist 32774) - Holen Sie sich die Kube-Konfiguration für Minikube
minikube kubectl -- config view
und speichern Sie sie in einer lokalen Datei (zum Beispiel~/minikube.config
). - Bearbeiten Sie
clusters[0].cluster.server
das Feld im~/minikube.config
- stellen Sie es auf den entsprechenden Remote-Host und Port ein, den Sie in Schritt 2 erhalten haben - Erstellen Sie ein lokales Verzeichnis für Zertifikate und einen Schlüssel:
mkdir -p ~/.minikube/profiles/minikube
- kopieren
client.key
undclient.crt
vomca.crt
Minikube-Host auf einen lokalen Host:scp 'example.com:.minikube/profiles/minikube/client.*' ~/.minikube/profiles/minikube/
undscp 'example.com:.minikube/ca.crt' ~/.minikube/
- Führen Sie es lokal aus,
kubectl --kubeconfig ~/minikube.config get pod -A
um zu überprüfen, ob es funktioniert
Antwort3
Sie können socat verwenden, um die Standard-IP und den Standard-Port (192.168.49.2:8443) von Minikube an die Standard-Netzwerkkarten-IP des Systems weiterzuleiten.
socat TCP4-LISTEN:8443,fork TCP4:192.168.49.2:8443