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


Posted in Servers onApril 01, 2022

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。

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

可以看到,访问方式有 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访问配置的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
使用Apache的rewrite
Mar 09 Servers
nginx location中多个if里面proxy_pass的方法
Mar 31 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
CentOS7和8下安装Maven3.8.4
Apr 07 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
Tomcat配置访问日志和线程数
May 06 Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Jun 25 Servers
Linux安装Docker详细教程
Jul 07 Servers
Kubernetes中Deployment的升级与回滚
Apr 01 #Servers
了解Kubernetes中的Service和Endpoint
Kubernetes控制节点的部署
Apr 01 #Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 #Servers
iSCSI服务器CHAP双向认证配置
Apr 01 #Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 #Servers
Vertica集成Apache Hudi重磅使用指南
You might like
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
关于Python解包知识点总结
2020/05/05 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
一道SQL面试题
2012/12/31 面试题
介绍一下grep命令的使用
2015/06/12 面试题
广告设计应届生求职信
2014/03/01 职场文书
会计主管岗位职责
2015/04/02 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
如何用python清洗文件中的数据
2021/06/18 Python