Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
写什么呢
前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关。
体验地址 http://neting.whuanle.cn:30080/
账号 admin,密码 admin123
本篇文章主要介绍,如何通过 C# 开发基于 Kuberetes 的应用,实现获取 Kubernets 中各种资源的信息,以及实现 Conroller 的前提知识。而在下一篇中则会讲解如何实现 Conroller 和 Kubernetes Operator。
Kubernetes API Server
kube-apiserver 是 k8s 主要进程之一,apiserver 组件公开了 Kubernetes API (HTTP API),apiserver 是 Kubernetes 控制面的前端,我们可以用 Go、C# 等编程语言写代码,远程调用 Kubernetes,控制集群的运行。apiserver 暴露的 endiont 端口是 6443。
为了控制集群的运行,Kubernetes 官方提供了一个名为 kubectl 的二进制命令行工具,正是 apiserver 提供了接口服务,kubectl 解析用户输入的指令后,向 apiserver 发起 HTTP 请求,再将结果反馈给用户。
kubectl
kubectl 是 Kubernetes 自带的一个非常强大的控制集群的工具,通过命令行操作去管理整个集群。
Kubernetes 有很多可视化面板,例如 Dashboard,其背后也是调用 apiserver 的 API,相当于前端调后端。
总之,我们使用的各种管理集群的工具,其后端都是 apiserver,通过 apiserver,我们还可以定制各种各样的管理集群的工具,例如网格管理工具 istio。腾讯云、阿里云等云平台都提供了在线的 kubernetes 服务,还有控制台可视化操作,也是利用了 apiserver。
你可以参考笔者写的 Kubernetes 电子书,了解更多:https://k8s.whuanle.cn/1.basic/5.k8s.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OBijsiOr-1643062798178)(images/master.png)]
简而言之, Kubernetes API Server 是第三方操作 Kubernetes 的入口。
暴露 Kubernetes API Server
首先查看 kube-system 中运行的 Kubernetes 组件,有个 kube-apiserver-master 正在运行。
root@master:~# kubectl get pods -o wide -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
... ...
kube-apiserver-master 1/1 Running 2 (76d ago) 81d 10.0.0.4 master
... ...
虽然这些组件很重要,但是只会有一个实例,并且以 Pod 形式运行,而不是 Deployment,这些组件只能放在 master 节点运行。
然后查看 admin.conf 文件,可以通过 /etc/kubernetes/admin.conf
或 $HOME/.kube/config
路径查看到。
admin.conf 文件是访问 Kubernetes API Server 的凭证,通过这个文件,我们可以使用编程访问 Kubernetes 的 API 接口。
但是 admin.conf 是很重要的文件,如果是开发环境开发集群,那就随便造,如果是生产环境,请勿使用,可通过角色绑定等方式限制 API 访问授权。
然后把 admin.conf 或 config 文件下载到本地。
你可以使用 kubectl edit pods kube-apiserver-master -n kube-system
命令,查看 Kubernetes API Server 的一些配置信息。
由于 Kubernetes API Server 默认是通过集群内访问的,如果需要远程访问,则需要暴露到集群外(与是否都在内网无关,与是否在集群内有关)。
将 API Server 暴露到集群外:
kubectl expose pod kube-apiserver-master --type=NodePort --port=6443 -n kube-system
查看节点随机分配的端口:
root@master:~# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-apiserver-master NodePort 10.101.230.138 6443:32263/TCP 25s
32263 端口是 Kubernetes 自动分配,每个人的都不一样。
然后通过 IP:32263
即可测试访问。
如果你的集群安装了 CoreDNS,那么通过其他节点的 IP,也可以访问到这个服务。
然后将下载的 admin.conf 或者 config 文件(请改名为 admin.conf),修改里面的 server
属性,因为我们此时是通过远程访问的。
连接到 API Server
新建一个 MyKubernetes 控制台项目,然后将 admin.conf 文件复制放到项目中,随项目生成输出。