Dashboard管理Kubernetes集群与API访问配置

目录
  • Kubectl 命令大全
  • 安装 Kubernetes-Dashboard
  • RESTful API
  • 鉴权
  • 注解
  • Pod YAML 结构
  • 配置

Kubectl 命令大全

下面列出了 kubectl 的所有命令以及其缩写形式,供翻阅查询。

kubectl 命令格式:

kubectl [command] [type] [Name] [flag]
all events (ev) podsecuritypolicies (psp)
certificatesigningrequests (csr) horizontalpodautoscalers (hpa) podtemplates
clusterrolebindings ingresses (ing) replicasets (rs)
clusterroles jobs replicationcontrollers (rc)
clusters (valid only for federation apiservers) limitranges (limits) resourcequotas (quota)
componentstatuses (cs) namespaces (ns) rolebindings
configmaps (cm) networkpolicies (netpol) roles
controllerrevisions nodes (no) secrets
cronjobs persistentvolumeclaims (pvc) serviceaccounts (sa)
customresourcedefinition (crd) persistentvolumes (pv) services (svc)
daemonsets (ds) poddisruptionbudgets (pdb) statefulsets
deployments (deploy) podpreset storageclasses
endpoints (ep) pods (po)  

安装 Kubernetes-Dashboard

Kubernetes-Dashboard 是一个 管理 Kubernetes 集群的 Web UI,跟 kubectl 一样,其后端是 API-Server,使用在线的 YAML 文件部署 Kubernetes-Dashboard :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

dashboard 创建后会在 kubernetes-dashboard 命名空间中。

root@instance-1:~# kubectl get pods --namespace=kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-856586f554-4nd9v   1/1     Running   0          9d
kubernetes-dashboard-78c79f97b4-288js        1/1     Running   0          9d

root@instance-1:~# kubectl get services --namespace=kubernetes-dashboard
NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper       ClusterIP   10.98.50.123     <none>        8000/TCP        9d
kubernetes-dashboard            NodePort    10.111.44.44     <none>        443/TCP   9d

由于其网络默认是 NodePort 的方式,没有配置外界打开,所以为了能够被外界访问,可以修改其 service:

kubectl edit service kubernetes-dashboard --namespace=kubernetes-dashboard
  ports:
  - nodePort: 30633
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort

或者把 type 修改为 LoadBalancer。

在集群内网可以通过 443 访问,在外网可以通过 30633 访问,访问方式是 https。

可以看到,访问方式有 Token 和配置文件方式(kubeconfing),这两者后面再讲。

通过下面这条命令我们可以查看 Token:

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

复制,填写到 Web UI 中,即可进入控制台。

RESTful API

我们可以集群中的任意节点访问 API-Server ,其端口是 6443。

API 可以使用 Token 和 证书方式 进行认证,我们可以使用上一小节查询出来的 token,对 API 进行访问:

curl https://k8smaster:6443/api/v1/pods -k --header "Authorization: bearer {此处填写你的token}"

注:使用 -k 可以忽略证书问题;k8smaster 是笔者配置 hosts 的,具体要以你的 主节点 ip为准。

也可以使用证书访问 API,其格式如下:

curl --cert /tmp/client.pem --key /tmp/client-key.pem \
--cacert /tmp/ca.pem -v -XGET \
https://k8smaster:6443/api/v1/pods

这里不多介绍 k8s 的 API,只介绍几个对调试有用的 API。

GET /api/v1/namespaces/{namespace}/pods/{name}/exec

GET /api/v1/namespaces/{namespace}/pods/{name}/log

GET /api/v1/watch/namespaces/{namespace}/pods/{name}

鉴权

由于 API-Server 需要一定权限才能访问,所以实际上用户使用 kubectl 工具时,也需要权限才能执行命令。

kubectl auth can-i 命令用来确定一个用户是否能够访问 API。

如果要确定当前用户是否有权限访问 deployments,可以使用:

kubectl auth can-i create deployments
kubectl auth can-i {命令}

如果要检查其它用户是否有权限,可以使用 --as

kubectl auth can-i create deployments --as ddddd
kubectl auth can-i create deployments --as ddddd --namespace kube-system

为了更加方便地获得权限,我们可以使用 SelfSubjectAccessReview 这个 API 来获得权限信息资源,它将 API 服务器鉴权公开给外部服务,其 API 说明文档地址:

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#selfsubjectaccessreview-v1-authorization-k8s-io

另外还有三个相关的 API:

  • SubjectAccessReview - 对任意用户的访问进行评估,而不仅仅是当前用户。 当鉴权决策被委派给 API 服务器时很有用。例如,kubelet 和扩展 API 服务器使用 它来确定用户对自己的 API 的访问权限。
  • LocalSubjectAccessReview - 与 SubjectAccessReview 类似,但仅限于特定的 名字空间。
  • SelfSubjectRulesReview - 返回用户可在名字空间内执行的操作集的审阅。 用户可以快速汇总自己的访问权限,或者用于 UI 中的隐藏/显示动作。

这里只需要了解,不需要深入。

注解

我们可以使用 Kubernetes 注解为对象附加任意的非标识的元数据,注解使用 annotations 标识。客户端程序(例如工具和库)能够获取这些元数据信息。

我们查看 dashboard 的相关 annotations :

kubectl describe services -n kubernetes-dashboard
... ...
Labels:                   k8s-app=kubernetes-dashboard
Annotations:              <none>
... ...

annotations 由 key/value 组成,类似 label,但是 annotations 支持一些特殊字符,可以用作构建发布镜像时的信息、日志记录等。

kubectl annotate service kubernetes-dashboard -n kubernetes-dashboard description='my test'
key=description

value=my test

重新查看 describe,可以看到:

Annotations:              description: my test

如果要覆盖 key 的值,需要加上 --overwrite 。

如果要删除一个 key:

kubectl annotate service kubernetes-dashboard description-

Pod YAML 结构

这是一个简单的 YAML 文件:

apiVersion: v1
kind: Pod
metadata:
    name: firstpod
spec:
    containers:
    - image: nginx
      name: stan 

k8s 的 YAML 必须包含四个部分:

  • apiVersion:API 组的版本
  • kind:创建的对象类型
  • metadata:元数据,name 字段必填
  • spec:怎么创建对象,如果是 pod,则 container 必填。

配置

在 $HOME/.kube/config 文件中存储了 Kubernetes 的配置信息,可以直接打开文件查看,也可以通过 kubectl config view 查看(只显示部分信息)。

前面我们访问 API 时,使用了 token,现在我们可以通过这个 config,来创建证书文件,通过证书访问。。

client 密钥,就在这个 config 文件的 client-certificate-data 字段中存储。

grep client-cert $HOME/.kube/config |cut -d" " -f 6

key,在 client-key-data 字段中存储:

grep client-key-data $HOME/.kube/config |cut -d " " -f 6

API-Server 的公钥(auth),就在 certificate-authority-data 字段中存储:

grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6

意思就是三个重要的 密钥数据,这里为了方便,分别使用 client、key、auth 三个变量存储查询的数据。

export client=(grep client-cert $HOME/.kube/config |cut -d" " -f 6)
export key=(grep client-key-data $HOME/.kube/config |cut -d " " -f 6)
export auth=(grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6)

创建证书文件:

echo $client | base64 -d - > ./client.pems
echo $key | base64 -d - > ./client-key.pem
echo $auth | base64 -d - > ./ca.pem

然后访问的时候就可以通过证书安全地访问 API-Server:

curl --cert ./client.pem --key ./client-key.pem --cacert ./ca.pem https://k8smaster:6443/api/v1/pod

到此这篇关于Dashboard管理Kubernetes集群与API访问配置的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Kubernetes集群的组成介绍

    Kubernetes集群的组成 我们谈起 Kubernetes 和应用部署时,往往会涉及到容器.节点.Pods 等概念,还有各种术语,令人眼花缭乱.为了更好地摸清 Kubernetes,下面我们将介绍 Kubernetes 中与应用程序部署(deployment)和执行(execution)相关的知识. Kubernetes 集群由多个组件(components).硬件(hardware).软件(software)组成,它们共同工作来管理容器化(containerized)应用的部署和执行,这些

  • Kubernetes部署实例并配置Deployment、网络映射、副本集

    Deployment Deployment 是 Kubernetes 提供的一种自我修复机制来解决机器故障维护的问题. 当我们单独使用 docker 部署应用时,为了应用挂了后能够重启,我们可以使用 --restart=always 参数,例如: docker run -itd --restart=always -p 666:80 nginx:latest 但是这种方式只能单纯重启容器,并不具备从机器故障中恢复的能力. Kubernetes Deployment 是一个配置,它可以指挥 Kube

  • Kubernetes控制节点的部署

    标签和nodeSelector 标签(Label)是附加到 Kubernetes 对象上的键值对,如果用 json 表示附加到 metadata 的 label: "metadata": { "labels": { "key1" : "value1", "key2" : "value2" } } yaml: metadata: labels: key1: "value1&quo

  • 了解Kubernetes中的Service和Endpoint

    目录 Srevice Service 的创建及现象 Service 定义 Endpoint slices 创建 Endpoint.Service Service 创建应用 创建 Endpoint Srevice Service 是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法.如果我们使用 Deployment 部署 pod,则可以以 Deployment 为对象创建 Service. 在 K8S 中,每个 Pod 都有其自己唯一的 ip 地址,而 Service 可以为多个 Po

  • Kubernetes关键组件与结构组成介绍

    架构组成 我们可以看一下这两张图,所表示的都是关于 Kubernetes 集群的架构. 一个 kubernetes 集群是由一组被称为节点(Node)的机器或虚拟机组成,集群由 master.worker 节点组成,每个机器至少具有一个 worker 节点. Master 在前面两个图中,可以看到 Master 是由一组称为控制平面组件组成的,我们可以打开 /etc/kubernetes/manifests/ 目录,里面是 k8s 默认的控制平面组件. . ├── etcd.yaml ├── k

  • Minikube搭建Kubernetes集群

    Minikube 打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb.rpm包),再使用 apt 或 yum 安装. 或者直接下载 minikube 最新版本二进制文件(推荐). curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linu

  • 使用kubeadm命令行工具创建kubernetes集群

    目录 命令行工具 通过软件仓库安装 二进制文件下载安装 ubutu & centos 快速安装 创建 kubernetes 集群 1,创建 Master 2,然后初始化集群网络. 3,加入集群 清除环境 命令行工具 主要有三个工具,命令行工具使用 kube 前缀命名. kubeadm:用来初始化集群的指令. kubelet:在集群中的每个节点上用来启动 Pod 和容器等. kubectl:用来与集群通信的命令行工具. 通过软件仓库安装 方法 ① 此方法是通过 Google 的源下载安装工具包.

  • Kubernetes中Deployment的升级与回滚

    目录 更新 上线 回滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 更新 打开 https://hub.docker.com/_/nginx 可以查询 nginx 的镜像版本,我们可以先选择一个旧一点的版本. 首先,我们创建一个 Nginx 的 Deployment,副本数量为 3. kubectl create deployment nginx --image=nginx:1.19.0 --replicas=3 首次部署的时候,跟之前

  • kubernetes中的namespace、node、pod介绍

    namepace.node.pod? 当我们讨论 k8s 时总是会讨论集群,k8s 中的每个集群由多个机器/虚拟机组成,集群也被称为 命名空间(namespace),命名空间是虚拟的,因此也叫虚拟集群. Namespace 是对一组资源和对象的抽象集合. node 是集群中的单个机器/虚拟机,node 有两种,一种是 master ,一种是 worker.master 用来运行 kubernetes 服务,例如 API Server:worker 是真正工作的节点,用来运行你的容器. maste

  • 配置Kubernetes外网访问集群

    查询 Service 关于 Service,读者可以查看官方文档的资料:https://kubernetes.io/zh/docs/concepts/services-networking/service/ Service 是 k8s 中为多个 pod 公开网络服务的抽象方法.在 k8s 中,每个 pod 都有自己的 ip 地址,而且 Service 可以为一组 pod 提供相同的 DNS ,使得多个 pod 之间可以相互通讯,k8s 可以在这些 pod 之间进行负载均衡. 查询 pod: ku

随机推荐