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?
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:
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
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
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
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