这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

已有系统接入

1 - Prometheus

KubeCube 在部署时会自动安装 Prometheus 等监控组件,以实现监控功能。本文档介绍了如何在 KubeCube 中接入用户已有的 Prometheus。

准备工作

  1. 在集群部署好 Prometheus,Prometheus 可以正常监控到集群资源的数据;

  2. 在集群中部署好 KubeCube;

    说明:部署好 KubeCube 后,由于集群内已有 Prometheus operator,多个 operator 会导致集群内 Prometheus 相关功能不可用,需要卸载 KubeCube 监控组件或删除本地 operator。

  3. 以平台管理员角色登录 KubeCube 管控集群。

步骤

1、添加 Label

由于 KubeCube 需要实现多集群监控,因此在 KubeCube 查询监控数据时,都会在 query 表达式中添加 cluster={clusterName} 来进行集群过滤。用户需要在 Prometheus 的 exporter 中添加这一 label,前端查询监控数据时才能查询到结果。

2、卸载 KubeCube 监控组件

方式一 页面操作:

  1. 点击页面右上角【切换到控制台】,点击任意空间,进入到控制台页面;

  2. 在左侧菜单栏点击【自定义资源CRD】,进入到集群级别 CRD 列表,可以点击右上方输入 “hotplug” 进行搜索,找到 “hotplugs.hotplug.kubecube.io” CRD,点击【v1】版本进入 CRD 详情页;

  3. 选择 common 实例,点击【设置YAML】,找到 spec.component. name=kubecube-monitoring,将 “status” 改成 “disabled”,即卸载 KubeCube 自带监控组件。

方式二 命令行操作:

  1. kubectl edit hotplug common
  2. 找到 spec.component. name=kubecube-monitoring,将 “status” 改成 “disabled”。

详细配置说明见 热插拔

3、部署 ServiceMonitor

查看集群资源

查看控制台内监控数据,需要部署两个 ServiceMonitor:kubelet 和 kube-state-metrics 的 ServiceMonitor,样例如下:

  • 部署 kubecube-monitoring-kubelet

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: kubecube-monitoring-kubelet
      namespace: kubecube-monitoring
    spec:
      endpoints:
      - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
        honorLabels: true
        port: https-metrics
        relabelings:
        - sourceLabels:
          - __metrics_path__
          targetLabel: metrics_path
        scheme: https
        tlsConfig:
          caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecureSkipVerify: true
      - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
        honorLabels: true
        path: /metrics/cadvisor
        port: https-metrics
        relabelings:
        - sourceLabels:
          - __metrics_path__
          targetLabel: metrics_path
        scheme: https
        tlsConfig:
          caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecureSkipVerify: true
      - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
        honorLabels: true
        path: /metrics/probes
        port: https-metrics
        relabelings:
        - sourceLabels:
          - __metrics_path__
          targetLabel: metrics_path
        scheme: https
        tlsConfig:
          caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecureSkipVerify: true
      jobLabel: k8s-app
      namespaceSelector:
        matchNames:
        - kube-system
      selector:
        matchLabels:
          k8s-app: kubelet
    
  • 部署 kubecube-monitoring-kube-state-metrics

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: kubecube-monitoring-kube-state-metrics
      namespace: kubecube-monitoring
    spec:
      endpoints:
      - honorLabels: true
        port: http
      selector:
        matchLabels:
          app.kubernetes.io/instance: kubecube-monitoring
          app.kubernetes.io/name: kube-state-metrics
    

查看组件监控

当前 KubeCube 平台支持对组件的监控视图可视化查询,详细说明见 平台组件监控 。接入外部监控后,用户可按需在集群内部署对应组件的 ServiceMonitor。

各个 ServiceMonitor 的 yaml 可参考 https://github.com/kubecube-io/charts/tree/main/kubecube-monitoring/templates/exporters

4、部署 Dashboard

查看集群资源(控制台内监控数据),需要部署:

查看组件监控,可以部署对应的 Dashboard:

5、修改 Nginx 配置

  1. 使用命令行:kubectl edit configmap nginx-config -n kubecube-system

  2. 找到原有的地址配置,修改为自有 Prometheus 地址

    upstream monitoring {
        server kubecube-thanos-query.kubecube-monitoring:9090;
    }
    

    即 将kubecube-thanos-query.kubecube-monitoring:9090 替换为外部地址。

  3. 重启 pod:kubectl delete pod frontend-xxxxxx-xxxxx -n kubecube-system

2 - ElasticSearch

KubeCube 提供了日志服务和操作审计服务,默认关闭。用户在开启后,日志服务和操作审计服务均会将日志发送到 ElasticSearch 进行存储,由 ElasticSearch 对日志进行管理。用户可以在 热插拔 中修改配置,安装内部 ElasticSearch,也可以配置外部的 ElasticSearch 地址,对接已有的 ElasticSearch。下面分别介绍如何在这两个功能中接入外部 ElasticSearch。

日志

方式一 页面操作:

  1. 点击页面右上角【切换到控制台】,点击任意空间,进入到控制台页面;

  2. 在左侧菜单栏点击【自定义资源CRD】,进入到集群级别 CRD 列表,可以点击右上方输入 “hotplug” 进行搜索,找到 “hotplugs.hotplug.kubecube.io” CRD,点击【v1】版本进入 CRD 详情页;

  3. 选择 common 实例,点击【设置YAML】,找到 spec.component. name=logseer,添加环境变量,如:

- name: logseer
  namespace: logseer
  pkgName: logseer-v1.0.0.tgz
  status: disabled
  env: |
    address: elasticsearch-master.elasticsearch.svc

方式二 命令行操作:

  1. kubectl edit hotplug pivot-cluster
  2. 找到 spec.component. name=logseer,添加环境变量,同上。

详细配置说明见 热插拔

操作审计

  1. kubectl edit deploy audit -n kubecube-system

  2. 添加环境变量:AUDIT_WEBHOOK_HOST、AUDIT_WEBHOOK_INDEX、AUDIT_WEBHOOK_TYPE,如

    env:
    - name: AUDIT_WEBHOOK_HOST
      value: http://elasticsearch-master.elasticsearch:9200
    - name: AUDIT_WEBHOOK_INDEX
      value: audit
    - name: AUDIT_WEBHOOK_TYPE
      value: logs
    

注:如果同时配置了内部和外部 ElasticSearch,审计日志将优先发到外部 ElasticSearch。

其他详细说明见:操作审计

3 - 第三方认证系统

外部认证系统接入

KubeCube 中包含一套自有的认证系统,同时也支持多种类型的外部认证系统的接入。本文档介绍了如何在 KubeCube 中接入 GitHub、Ldap 以及通用认证接口三种认证系统的操作步骤。

GitHub 认证

1. 登记应用信息

GitHub 注册一个 Oauth 应用,Homepage URL 和 Authorization callback URL 均填写 http://{kubecube_host}/#/login,创建成功后 Github 生成一个 ClientId,再手动创建一个 Client secret。

2. 修改配置文件

在管控集群修改 configmap:kubectl edit cm kubecube-auth-config -n kubecube-system,修改内容如下:

apiVersion: v1
kind: ConfigMap
data:
  github: |
    enabled: true
    clientId: 80b802dc59eeb847ed00
    clientSecret: 83dc8eb788f706de3449d45e61f45ebdca433de2
    host: http://10.219.196.107:30080    

参数说明如下:

参数说明类型默认值
enabled是否开启 Github 登录booleanfalse
clientIdGitHub 授权的 ClientIdstring
clientSecretGitHub 授权的 Client secretstring
hostKubeCube 服务器地址string

3. 访问前端登录页面

访问 KubeCube 前端登录页面,选择使用GitHub账号登录;

external-auth

授权应用,点击 Authorize xxxapp,即可登录到 KubeCube。

KubeCube 会使用 Github 返回的信息自动在集群中创建该用户,并标记该用户的 “LOGINTYPE” 为 “github”。

Ldap 认证

KubeCube 支持接入用户已部署的 LDAP 来进行认证。具体步骤如下。

1. 添加启动参数

为 KubeCube Deployment 添加启动参数,参数说明如下:

参数说明类型是否必填默认值示例
ldap-is-enable是否开启 Ldap 登录booleanfalsetrue
ldap-serverLdap 服务器地址string10.219.196.107
ldap-portLdap 服务器端口号string389389
ldap-baseLdap 查询分区stringdc=example,dc=com
ldap-admin-user-accountLdap 管理员账号stringcn=admin,dc=example,dc=com
ldap-admin-passwordLdap 管理员密码stringadmin123456
ldap-object-classLdap 对象类stringpersonperson
ldap-login-name-config用户名所在配置stringuidcn
ldap-object-categoryLdap objectcategorystringdc=example,dc=com

示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubecube
  namespace: kubecube-system
spec:
  template:
    spec:
      containers:
      - args:
        - -ldap-is-enable=true
        - -ldap-object-class=person
        - -ldap-server=10.219.196.107
        - -ldap-base=dc=example,dc=com
        - -ldap-admin-user-account=cn=admin,dc=example,dc=com
        - -ldap-admin-password=admin123456
        - -ldap-login-name-config=cn

2. 请求登录

接口路径
/api/v1/cube/login
接口方法

POST

请求参数
参数名称参数说明参数来源参数类型是否必须备注
name用户名bodystring
password密码bodystring
loginType登录方式bodystringldap
响应

如果 Ldap 返回认证成功,KubeCube 在集群中创建该用户,并标记该用户的 “LOGINTYPE” 为 “ldap”。

响应码状态描述响应体
200OK请求成功,返回在集群中创建的User信息User
数据模型
User
参数名称参数说明参数类型是否必须备注
kindUserstring
apiVersionuser.kubecube.io/v1string
metadata元数据Metadata
specUserSpec
statusUserStatus
Metadata
参数名称参数说明参数类型是否必须备注
name该用户在集群中的名称string
labels标签map[string]stringLdap返回的真实用户名保存在标签中
creationTimestamp创建此对象时的时间戳Time
generation所需状态的特定生成的序列号integer
uid资源对象在集群中的唯一标识string
selfLink资源关联的urlstring
UserSpec
参数名称参数说明参数类型是否必须备注
loginType登录方式stringldap
UserStatus
参数名称参数说明参数类型是否必须备注
lastLoginTime上次登录时间Time
lastLoginIP上次登录IPstring
请求示例
curl https://0.0.0.0:7443/api/v1/cube/login -X POST -d '{"name": "test123","password":"123456","loginType":"ldap"}' --header "Content-Type: application/json" 
返回示例
{
	"kind": "User",
	"apiVersion": "user.kubecube.io/v1",
  "metadata": {
		"labels": {
			"name": "test123"
		},
	"spec": {
		"loginType": "ldap",
	},
	"status": {
		"lastLoginTime": "2022-07-06T06:25:37Z",
		"lastLoginIP": "10.219.196.107"
	}
}

通用认证

通用认证指的是通过请求第三方接口的方式进行认证。KubeCube 提供了一种通用的接入方式,但对接口的返回有一定要求。具体步骤如下。

1. 接口准备

第三方认证接口要求:

  1. 请求 url 为配置的固定值,KubeCube 会将请求携带的 header 进行转发,因此第三方接口对 header 进行认证;
  2. 接口返回格式为 map[string]interface{},其中包含一组值为 key=“name”,value=“{用户名}”。

2. 添加启动参数

为 KubeCube Deployment 添加启动参数,参数说明如下:

参数说明类型是否必填默认值示例
generic-auth-is-enable是否开启通用认证方式booleanfalsetrue
generic-auth-url第三方认证urlstringhttps://kubecube123.com/api/v1/demo/auth
generic-auth-method第三方认证请求方式stringGET
generic-auth-scheme请求协议stringhttphttps
generic-auth-insecure-skip-verify是否跳过安全校验stringtrue
generic-auth-tls-certtls证书stringLS0NGc9PQotLS0tLUVOFURS0tLS0t
generic-auth-tls-keytls密钥stringLS0NsfGcQotfdLS0tLUVOFURtLS0ta1

示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubecube
  namespace: kubecube-system
spec:
  template:
    spec:
      containers:
      - args:
        - -generic-auth-is-enable=true
        - -generic-auth-url=https://kubecube123.com/api/v1/demo/auth
        - -generic-auth-method=GET
        - -generic-auth-scheme=https
        - -generic-auth-insecure-skip-verify=true

开启通用认证方式后,用户可跳过登录直接访问 KubeCube。KubeCube 会将请求携带的 header 转发给配置的第三方认证平台,由第三方认证平台返回的结果决定请求是否通过认证。