代码之家  ›  专栏  ›  技术社区  ›  kz28

如何启动(重新启动)kubernetes apiservice并添加用户名密码验证

  •  3
  • kz28  · 技术社区  · 8 年前

    我对库伯内特斯真的很陌生。我用这个指南创建了一个kubernetes集群 using kubeadm . 集群由一个主节点和两个节点组成。由于我想通过主apiserver(通过笔记本电脑上的浏览器)访问kubernetes web UI,我修改了 /etc/kubernetes/manifests/kube-apiserver.yaml 遵循这些 K8 WebUI ,则, Access control . 我所做的是在 /etc/kubernetes/manifests/kube-apiserver。亚马尔 :

    - --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并让集群在更改 。亚马尔

    此外,如果有人能告诉我添加用户名/密码身份验证的确切步骤,以便我可以通过笔记本电脑上的浏览器访问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: {}
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Anton Kostenko    8 年前

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

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

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

    我建议您使用Helm package manager来管理集群中的所有安装,这比手动编写所有配置要容易得多,也很有用。

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

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

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

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

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

    1. 现在检查入口吊舱的工作节点 kubectl describe pod $pod-with-ingress 并将该pod的IP地址添加到 hosts 具有FQDN的文件 my-dashboard.local

    最后,仪表板必须在浏览器中可用 http://my-dashboard.local 住址

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