文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

Kubectl 命令大全

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

kubectl 命令格式:

kubectl [command] [type] [Name] [flag]
allevents (ev)podsecuritypolicies (psp)
certificatesigningrequests (csr)horizontalpodautoscalers (hpa)podtemplates
clusterrolebindingsingresses (ing)replicasets (rs)
clusterrolesjobsreplicationcontrollers (rc)
clusters (valid only for federation apiservers)limitranges (limits)resourcequotas (quota)
componentstatuses (cs)namespaces (ns)rolebindings
configmaps (cm)networkpolicies (netpol)roles
controllerrevisionsnodes (no)secrets
cronjobspersistentvolumeclaims (pvc)serviceaccounts (sa)
customresourcedefinition (crd)persistentvolumes (pv)services (svc)
daemonsets (ds)poddisruptionbudgets (pdb)statefulsets
deployments (deploy)podpresetstorageclasses
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:

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

注解

我们可以使用 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 必须包含四个部分:

配置

在 $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访问配置的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯