Docker 如何启动(重新启动)kubernetes API服务并添加用户名密码身份验证
我对库伯尼特斯真的很陌生。我用这个指南创建了一个kubernetes集群。集群由一个主节点和两个节点组成。由于我想通过主apiserver(通过笔记本电脑上的浏览器)访问kubernetes web UI,因此我修改了以下内容: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
/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来管理集群中的所有安装,这比手动编写所有配置更容易、更有用
因此,要在裸机入口后面安装仪表板,您需要:
helminit
初始化Helm。它将创建其到kubernetes群集的服务器路径(tiller)。您可以在文档中查看有关初始化的所有详细信息,但通常情况下,它只起作用helm install stable/nginx incress--set=controller.service.type=NodePort
helm安装stable/kubernetes仪表板\
--set=ingres.enabled=True,ingres.hosts=my dashboard.local
kubectl使用Ingress
检查入口吊舱在哪个节点上工作,并使用FQDNmy dashboard.local
将该吊舱的IP地址添加到您的主机
文件中http://my-dashboard.local
地址
另外,我强烈建议您在集群上设置RBAC,以管理其中每个用户和应用程序的权限,包括仪表板。从概念上讲,您做的一切都是正确的。您可以共享完整的kube-apiserver.yaml吗?看起来您对它有一些问题,这就是为什么它在修改后无法启动的原因。@AntonKostenko,我附上了文件,谢谢!非常感谢。您能告诉我如何优雅地重新启动kubernetes apiserver吗。我已经删除了对
kube apiserver.yaml
所做的所有更改。你能告诉我应该执行的命令吗?我不认为你需要关心优雅的重启,事实上我从来没有听说过停止API服务器的任何特殊过程,你可以直接终止它。所有关键数据都在etcd中,因此它是您唯一需要关心的事情。