web-dev-qa-db-fra.com

Comment accéder / exposer le service kubernetes-dashboard en dehors d'un cluster?

J'ai les services suivants:

ubuntu@master:~$ kubectl get services --all-namespaces
NAMESPACE     NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
default       kubernetes             100.64.0.1      <none>        443/TCP         48m
kube-system   kube-dns               100.64.0.10     <none>        53/UDP,53/TCP   47m
kube-system   kubernetes-dashboard   100.70.83.136   <nodes>       80/TCP          47m

J'essaie d'accéder au tableau de bord de kubernetes. La réponse suivante semble raisonnable, compte tenu du fait que curl n'est pas un navigateur.

ubuntu@master:~$ curl 100.70.83.136
 <!doctype html> <html ng-app="kubernetesDashboard"> <head> <meta charset="utf-8"> <title>Kubernetes Dashboard</title> <link rel="icon" type="image/png" href="assets/images/kubernetes-logo.png"> <meta name="viewport" content="width=device-width"> <link rel="stylesheet" href="static/vendor.36bb79bb.css"> <link rel="stylesheet" href="static/app.d2318302.css"> </head> <body> <!--[if lt IE 10]>
      <p class="browsehappy">You are using an <strong>outdated</strong> browser.
      Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your
      experience.</p>
    <![endif]--> <kd-chrome layout="column" layout-fill> </kd-chrome> <script src="static/vendor.633c6c7a.js"></script> <script src="api/appConfig.json"></script> <script src="static/app.9ed974b1.js"></script> </body> </html> 

Selon la documentation, le bon point d'accès est https: // localhost/ui . Donc, j'essaye et je reçois un résultat un peu inquiétant. Est-ce une réponse attendue?

ubuntu@master:~$ curl https://localhost/ui
curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

Essayer la même chose sans validation de certificat. Pour la boucle, cela pourrait être OK. mais j'ai la même chose dans un navigateur, qui se connecte via la redirection de port via l'option vagrant forwarded_port.

ubuntu@master:~$ curl -k https://localhost/ui
Unauthorized

Qu'est-ce que je fais mal? et comment m'assurer que je peux accéder à l'interface utilisateur? Actuellement, il répond par Non autorisé.

Les documents du tableau de bord indiquent que le mot de passe est dans la configuration:

ubuntu@master:~$ kubectl config view
apiVersion: v1
clusters: []
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []

mais il semble que je n'ai rien ... Est-ce un comportement attendu? Comment puis-je autoriser avec l'interface utilisateur?

18
Andrew

Vous devez exécuter le proxy kubectl localement pour accéder au tableau de bord en dehors du cluster kubernetes. Cela est dû au mécanisme d'authentification. Après avoir exécuté la commande ci-dessous, vous pourrez afficher le tableau de bord à http: // localhost/ui sur votre navigateur. Le fichier admin.conf est le fichier de votre maître kubernetes à /etc/kubernetes/admin.conf Vous devrez scper ce fichier sur la machine à partir de laquelle vous souhaitez accéder au tableau de bord et le transmettre à la commande kubectl.

kubectl --kubeconfig =./admin.conf proxy -p 80

L'approche nodePort mentionnée par @ user2363318 sera applicable si l'une des deux conditions suivantes est valide:

  1. Votre client http (navigateur ou curl) peut envoyer des jetons d'authentification
  2. Votre service dans le cluster kubernetes n'a pas d'authentification
9
livinston

Le wiki officiel est un peu confus alors je l'ai réorganisé ici:

si vous utilisez recommander yaml pour déployer le tableau de bord, vous ne devez accéder à votre tableau de bord que par https, et vous devez générer vos certificats, reportez-vous à guide alors, vous pouvez exécuter kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' pour visiter le tableau de bord sur " http: // localhost: 8001/ui ". Cette page doit se connecter à l'aide d'un jeton, veuillez vous référer à cette page . Vous pouvez également ajouter NodePort à votre yaml et y accéder en utilisant <nodeip>:<port>

si vous déployez utilisez la méthode alternative http , vous pouvez accéder uniquement à votre tableau de bord par nodeip: port , pensez à l'ajouter à yaml première!! Après le déploiement, vous devez également générer votre jeton et ajouter un en-tête Authorization: Bearer <token> pour chaque demande .

Je pense que cela peut vous aider et aider ceux qui veulent utiliser kube-dashboard

7
ysjiang

Vous pouvez référencer le document:

https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above

Le plus simple est de

$ kubectl -n kube-system edit service kubernetes-dashboard

changer la .spec.type à NodePort

7
Yang Young

Vous pouvez atteindre en appuyant sur le nodePort pour le tableau de bord sur le maître

kubectl describe services kubernetes-dashboard --namespace=kube-system
NodePort:       <unset> 30042/TCP

http: // MASTER: 30042

6
user2363318

Ajoutez simplement un peu de clarté à la réponse ci-dessus,

Changez le type: ClusterIP pour taper: NodePort et enregistrez le fichier.

Le tableau de bord a été exposé sur le port 31707 (HTTPS). Vous pouvez maintenant y accéder depuis votre navigateur à: https: // master-ip: 31707 .

Remarque: Le port mentionné peut être différent dans votre cas, exécutez simplement la commande kubectl ci-dessous pour obtenir le port du maître.

kubectl -n kube-system obtenir un service kubernetes-dashboard

0
anraj