Kubernetes-dashboard部署详解

容器化部署服务已经变成微服务时代的主流,在众多容器化技术之中,kubernetes又是属于相对火爆,社区活跃的一个产品。

容器化部署给我们带来了便捷的同时,也给我们带来了运维方面的挑战。kubernetes官方给我们提供了一种图形化管理kubernetes的方式,即kubernetes-dashboard。

说明:本篇为本人开发之余,为了熟悉学习kubernetes环境,搭建自己本地的一个案例记录。

下面让我们进入正题

部署思路

  1. 通过nginx-ingress的方式来对外提供访问
    优点:主流,安全,方便管理
    缺点:配置相当复杂麻烦,不熟悉的同学会晕圈
  2. 通过service的NodePort的方式来对外提供访问
    优点:部署方便,快捷
    缺点:NodePort端口过多造成不易管理的问题,不安全

这里我采用的是第二种NodePort的方式(生产环境推荐第一种方式)。

部署环境

Kubernetes-dashboard部署详解_第1张图片

部署准备

准备四台虚拟机

名称 地址
Nginx 192.168.137.129
k8s-master主节点 192.168.137.130
k8s-worker01 192.168.137.131
k8s-worker02 192.168.137.132

部署实战

1.域名和SSL证书的准备

由于kubernetes-dashboard目前仅支持Https的访问方式。所以,需要我们注册一个域名,并申请对应的SSL证书。

这里本人在阿里云上注册了域名,此域名未做备案,以下用k8s.uricat.com二级域名为本案例的最终访问地址。

SSL证书也是阿里云上申请的免费证书,非常方便。这里就不展开说明,有兴趣的同学可以去阿里云注册个域名,并申请SSL证书。

2.配置Nginx访问规则

这里直接附上本人配置的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;
    }
}

3.kubernetes-dasboard.yaml配置文件修改

这一步是将官方的配置文件下载到本地,并对相应的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-dashboard部署详解_第2张图片

查看kubernetes当前版本:kubectl get nodes在这里插入图片描述

4.运行并验证

  1. kubectl apply -f kubernetes-dasboard.yaml 启动dashboard服务
  2. 查看pod和service
    查看pod的运行情况:kubectl get pods -n kubernetes-dashboard在这里插入图片描述
    查看service信息:kubectl get svc -n kubernetes-dashboard
    在这里插入图片描述

5.创建登录权限口令并登录

登录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
  1. 生成用户和角色
kubectl apply -f dashboard-adminuser.yaml
  1. 生成token的命令
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

注意:生成token的命名空间要与dashboard-adminuser.yaml里配置的命名空间一致。

如果成功的话,会看到以下信息,复制并保存token值
Kubernetes-dashboard部署详解_第3张图片
登录的时候输入token,这里需要说明的是,如果命名空间被删除,那么token和token对应的用户权限等都需要重新生成。
Kubernetes-dashboard部署详解_第4张图片
最后成功进入图形化首页
Kubernetes-dashboard部署详解_第5张图片

6.排错说明

访问https://k8s.uricat.com的时候会出现无法连接。

需要设置允许转发:
iptables -P FORWARD ACCEPT

你可能感兴趣的:(kubernetes,docker,devops,容器,nginx,centos)