我对kubernetes很新。我使用本指南using kubeadm创建了一个kubernetes集群。群集由一个主节点和两个节点组成。由于我想通过主apiserver(通过我的笔记本电脑上的浏览器)访问kubernetes Web UI,因此我在K8 WebUI,Access control之后修改了/etc/kubernetes/manifests/kube-apiserver.yaml
。我所做的是在/etc/kubernetes/manifests/kube-apiserver.yaml
中添加了以下args:
- --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,但我仍然无法做到。
环境:
更新:附加的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: {}
答案 0 :(得分:2)
基于官方documentation,--authentication-mode=basic
不是Kubernetes 1.9 api服务器的有效选项。
尝试删除它,希望它会有所帮助。
如果要公开仪表板以进行外部访问,更好的方法是使用kube-proxy,但如果您想直接访问Dashboard,唯一或多或少安全的方法是使用Ingress。
我建议您使用Helm包管理器来管理群集中的所有安装,这比手动编写所有配置更加容易和有用。
因此,要在裸机上使用Ingress后面的仪表板,您需要:
helm init
初始化头盔。它将是您的kubernetes集群的服务器路径(分蘖)。有关初始化的所有详细信息,您可以在文档中查看,但通常只是工作。 helm install stable/nginx-ingress --set=controller.service.type=NodePort
helm install stable/kubernetes-dashboard \
--set=ingress.enabled=True,ingress.hosts=my-dashboard.local
kubectl describe pod $pod-with-ingress
工作的节点,并将该窗格的IP地址添加到包含FQDN hosts
的{{1}}个文件中。最后,必须在my-dashboard.local
地址的浏览器中提供信息中心。
P.S。我强烈建议您在群集上设置RBAC,以便管理每个用户及其中的应用程序的权限,包括仪表板。