容器化部署服务已经变成微服务时代的主流,在众多容器化技术之中,kubernetes又是属于相对火爆,社区活跃的一个产品。
容器化部署给我们带来了便捷的同时,也给我们带来了运维方面的挑战。kubernetes官方给我们提供了一种图形化管理kubernetes的方式,即kubernetes-dashboard。
说明:本篇为本人开发之余,为了熟悉学习kubernetes环境,搭建自己本地的一个案例记录。
下面让我们进入正题
这里我采用的是第二种NodePort的方式(生产环境推荐第一种方式)。
准备四台虚拟机
名称 | 地址 |
---|---|
Nginx | 192.168.137.129 |
k8s-master主节点 | 192.168.137.130 |
k8s-worker01 | 192.168.137.131 |
k8s-worker02 | 192.168.137.132 |
由于kubernetes-dashboard目前仅支持Https的访问方式。所以,需要我们注册一个域名,并申请对应的SSL证书。
这里本人在阿里云上注册了域名,此域名未做备案,以下用k8s.uricat.com二级域名为本案例的最终访问地址。
SSL证书也是阿里云上申请的免费证书,非常方便。这里就不展开说明,有兴趣的同学可以去阿里云注册个域名,并申请SSL证书。
这里直接附上本人配置的nginx.conf文件
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 443 ssl;
server_name k8s.uricat.com;
ssl_certificate /usr/local/cert/4638641_k8s.uricat.com.pem;
ssl_certificate_key /usr/local/cert/4638641_k8s.uricat.com.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log logs/k8s.uricat.com;
location / {
proxy_pass https://k8s.uricat.com;
}
}
upstream k8s.uricat.com {
server 192.168.137.130:30443 weight=1;
}
}
这一步是将官方的配置文件下载到本地,并对相应的Service内容进行修改,官方配置文件默认不是NodePort方式暴露服务。
kubernetes-dasboard.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30443 #对外暴露的端口
selector:
k8s-app: kubernetes-dashboard
注意:kubernetes的版本需要与kubernetes-dashboard的版本兼容。
本人这边的kubernetes版本是1.14.0,所以对于的dashboard的版本是v2.0.0-beta1版本。具体对应的版本可以到github上去查看。
查看kubernetes当前版本:kubectl get nodes
登录kubernetes-dashboard需要一个token的登录口令。首先得创建对应的用户,关联集群角色,并生成token口令。
官方文档介绍:
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
这里本人也是根据官方要求整理成一个dashboard-adminuser.yaml文件
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
kubectl apply -f dashboard-adminuser.yaml
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
注意:生成token的命名空间要与dashboard-adminuser.yaml里配置的命名空间一致。
如果成功的话,会看到以下信息,复制并保存token值
登录的时候输入token,这里需要说明的是,如果命名空间被删除,那么token和token对应的用户权限等都需要重新生成。
最后成功进入图形化首页
访问https://k8s.uricat.com的时候会出现无法连接。
需要设置允许转发:
iptables -P FORWARD ACCEPT