Docker 如何启动(重新启动)kubernetes API服务并添加用户名密码身份验证

Docker 如何启动(重新启动)kubernetes API服务并添加用户名密码身份验证,docker,kubernetes,kubectl,kubernetes-health-check,Docker,Kubernetes,Kubectl,Kubernetes Health Check,我对库伯尼特斯真的很陌生。我用这个指南创建了一个kubernetes集群。集群由一个主节点和两个节点组成。由于我想通过主apiserver(通过笔记本电脑上的浏览器)访问kubernetes web UI,因此我修改了以下内容:/etc/kubernetes/manifests/kube-apiserver.yaml。我所做的是在/etc/kubernetes/manifests/kube-apiserver.yaml中添加了以下参数: - --authentication-mode=basic

我对库伯尼特斯真的很陌生。我用这个指南创建了一个kubernetes集群。集群由一个主节点和两个节点组成。由于我想通过主apiserver(通过笔记本电脑上的浏览器)访问kubernetes web UI,因此我修改了以下内容:
/etc/kubernetes/manifests/kube-apiserver.yaml
。我所做的是在
/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调度程序、kube控制器管理器、/usr/bin/kubelet
都在运行,但未找到
kube-apiserver
进程我想知道重新启动kubernetes并让我的集群在更改
.yaml
之前立即恢复状态的优雅方式是什么

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

环境:

  • 三个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: {}
根据官方规定,
--authentication mode=basic
不是Kubernetes 1.9 api服务器的有效选项

试着移除它,希望它能有所帮助

公开仪表板进行外部访问怎么样?更好的方法是使用kube代理,但如果您想直接访问仪表板,唯一或多或少安全的方法就是使用kube代理

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

因此,要在裸机入口后面安装仪表板,您需要:

  • 确保群集再次工作:)
  • 使用将Helm安装到电脑上
  • 通过调用
    helminit
    初始化Helm。它将创建其到kubernetes群集的服务器路径(tiller)。您可以在文档中查看有关初始化的所有详细信息,但通常情况下,它只起作用
  • 现在需要安装入口。换句话说,Kubernetes中的入口是一种特殊的服务,类似于代理,它可以让您获得集群内应用程序的静态入口点。我们将使用基于的入口图表。您可以在其回购协议中查看可用选项。要使用基本配置安装,请调用:
  • helm install stable/nginx incress--set=controller.service.type=NodePort

  • 所以,现在我们有了一个入口,是时候用它的入口安装仪表板了。我强烈建议您使用HTTPS连接而不是HTTP,但现在我们将使用HTTP以加快部署速度。您可以阅读如何在入口上启用HTTPS连接(您需要添加一个包含TLS密钥和证书的密钥,并在图表中设置TLS配置)。那么,让我们安装dashboard:
  • helm安装stable/kubernetes仪表板\
    --set=ingres.enabled=True,ingres.hosts=my dashboard.local

  • 现在,通过
    kubectl使用Ingress
    检查入口吊舱在哪个节点上工作,并使用FQDN
    my dashboard.local
    将该吊舱的IP地址添加到您的
    主机
    文件中
  • 最后,仪表板必须通过
    http://my-dashboard.local
    地址


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

    从概念上讲,您做的一切都是正确的。您可以共享完整的kube-apiserver.yaml吗?看起来您对它有一些问题,这就是为什么它在修改后无法启动的原因。@AntonKostenko,我附上了文件,谢谢!非常感谢。您能告诉我如何优雅地重新启动kubernetes apiserver吗。我已经删除了对
    kube apiserver.yaml
    所做的所有更改。你能告诉我应该执行的命令吗?我不认为你需要关心优雅的重启,事实上我从来没有听说过停止API服务器的任何特殊过程,你可以直接终止它。所有关键数据都在etcd中,因此它是您唯一需要关心的事情。