gpt4 book ai didi

docker - 如何启动(重启)kubernetes apiservice并添加用户名密码认证

转载 作者:行者123 更新时间:2023-12-01 15:49:39 25 4
gpt4 key购买 nike

我真的是 kubernetes 的新手。我使用本指南创建了一个 kubernetes 集群 using kubeadm .集群由一个主节点和两个节点组成。因为我想通过 master apiserver(通过我笔记本电脑上的浏览器)访问 kubernetes web UI,所以我在这些 K8 WebUI 之后修改了 /etc/kubernetes/manifests/kube-apiserver.yaml , Access control .我所做的是在 /etc/kubernetes/manifests/kube-apiserver.yaml 中添加了以下参数:

- --authentication-mode=basic
- --basic-auth-file=/etc/kubernetes/auth.csv
- hostPath:
path: /etc/kubernetes/auth.csv
name: kubernetes-dashboard
- mountPath: /etc/kubernetes/auth.csv
name: kubernetes-dashboard
readOnly: true

我在 auth.csv 文件中有密码和用户名。但是,在我修改了 .yaml 文件后,我的 kube-apiserver 进程崩溃了。我通过运行 ps -aux|grep kube 检查了哪些进程正在运行。结果是 kube-scheduler,kube-controller-manager,/usr/bin/kubelet 都在运行,但是没有找到 kube-apiserver 进程。 我想知道什么是重新启动 kubernetes 并让我的集群立即恢复到更改 .yaml 之前的状态的优雅方法。

此外,如果有人可以向我展示添加用户名/密码身份验证的确切步骤,以便我可以通过笔记本电脑上的浏览器访问 Kubernetes Dashboad UI,或者任何其他可以帮助我查看的方式,我将不胜感激我的 Mac 笔记本电脑上的 K8 Web UI。我发现了一个类似的问题similar question , 但我还是做不到。

环境:

  • 三台ubuntu 16服务器:一主二节点
  • Kubernetes 1.9 版
  • 我可以通过 SSH 连接到这三台机器并拥有 root 权限。

更新 kube-apiserver.yaml 附件。

apiVersion: v1
kind: Pod
metadata:
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
- --insecure-port=0
- --advertise-address=172.16.28.125
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
- --secure-port=6443
- --enable-bootstrap-token-auth=true
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --requestheader-group-headers=X-Remote-Group
- --requestheader-allowed-names=front-proxy-client
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
- --allow-privileged=true
- --requestheader-username-headers=X-Remote-User
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --service-cluster-ip-range=10.96.0.0/12
- --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
- --authorization-mode=Node,RBAC
- --etcd-servers=http://127.0.0.1:2379
- --authentication-mode=basic
- --basic-auth-file=/etc/kubernetes/auth.csv
image: gcr.io/google_containers/kube-apiserver-amd64:v1.9.4
livenessProbe:
failureThreshold: 8
httpGet:
host: 172.16.28.125
path: /healthz
port: 6443
scheme: HTTPS
initialDelaySeconds: 15
timeoutSeconds: 15
name: kube-apiserver
resources:
requests:
cpu: 250m
volumeMounts:
- mountPath: /etc/kubernetes/pki
name: k8s-certs
readOnly: true
- mountPath: /etc/ssl/certs
name: ca-certs
readOnly: true
- mountPath: /etc/pki
name: ca-certs-etc-pki
readOnly: true
- mountPath: /etc/kubernetes/auth.csv
name: kubernetes-dashboard
readOnly: true
hostNetwork: true
volumes:
- hostPath:
path: /etc/kubernetes/pki
type: DirectoryOrCreate
name: k8s-certs
- hostPath:
path: /etc/ssl/certs
type: DirectoryOrCreate
name: ca-certs
- hostPath:
path: /etc/pki
type: DirectoryOrCreate
name: ca-certs-etc-pki
- hostPath:
path: /etc/kubernetes/auth.csv
name: kubernetes-dashboard
status: {}

最佳答案

基于官方documentation , --authentication-mode=basic 不是 Kubernetes 1.9 api 服务器的有效选项。

尝试删除它,希望它能有所帮助。

关于公开您的仪表板以供外部访问,更好的方法是使用 kube-proxy,但如果您想直接访问仪表板,唯一或多或少安全的方法是使用 Ingress为此。

我建议您使用 Helm 包管理器来管理集群中的所有安装,这比手动编写所有配置更容易和有用。

因此,要在裸机上获得 Ingress 背后的仪表板,您需要:

  1. 确保你再次集群工作:)
  2. 使用 official documentation 在您的 PC 上安装 Helm .
  3. 通过调用 helm init 初始化 Helm。它将其服务器路径(tiller)指向您的 kubernetes 集群。有关初始化的所有详细信息,您可以在文档中查看,但通常情况下,它只是工作。
  4. 现在您需要安装 Ingress。简而言之,Kubernetes 中的 Ingress 是一种类似代理的特殊服务,它可以让你获得集群内应用程序的静态入口点。我们将使用基于 Nginx 的 Ingress 图表.您可以在其仓库中查看可用选项。要使用基本配置安装它,请调用:

helm install stable/nginx-ingress --set=controller.service.type=NodePort

  1. 所以,现在我们有了 Ingress,是时候使用它的 chart 安装 Dashboard 了。 .我强烈建议您使用 HTTPS 连接而不是 HTTP,但现在我们将使用 HTTP 来加快部署速度。您可以阅读有关如何在 Ingress 上启用 HTTPS 连接的信息 here (您需要添加一个包含您的 TLS key 和证书的 secret ,并在图表中设置 TLS 配置)。那么,让我们安装仪表板:

helm install stable/kubernetes-dashboard\
--set=ingress.enabled=True,ingress.hosts=my-dashboard.local

  1. 现在通过 kubectl describe pod $pod-with-ingress 检查您的 Ingress pod 在哪个节点上工作,并将该 pod 的 IP 地址添加到您的 hosts 文件中,使用 FQDN my-dashboard.local.

最后,仪表板必须通过 http://my-dashboard.local 地址在您的浏览器中可用。

附言我强烈建议您还在集群上设置 RBAC,以管理集群中每个用户和应用程序的权限,包括仪表板。

关于docker - 如何启动(重启)kubernetes apiservice并添加用户名密码认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com