由于 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
NAMETYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-apiserver-master NodePort 10.101.230.138<none> 6443: 32263/TCP 25s
32263 端口是 Kubernetes 自动分配 , 每个人的都不一样 。
然后通过 IP:32263即可测试访问 。
如果你的集群安装了 CoreDNS , 那么通过其他节点的 IP , 也可以访问到这个服务 。
然后将下载的 admin.conf 或者 config 文件(请改名为 admin.conf) , 修改里面的 server属性 , 因为我们此时是通过远程访问的 。
连接到 API Server
新建一个 MyKubernetes 控制台项目 , 然后将 admin.conf 文件复制放到项目中 , 随项目生成输出 。
文章图片
然后在 Nuget 中搜索 KubernetesClient 包 , 笔者当前使用的是 7.0.1 。
然后在项目中设置环境变量:
文章图片
这个环境变量本身是 ASP.NET Core 自带的 , 控制台程序中没有 。
下面写一个方法 , 用于实例化和获取 Kubernetes 客户端:
privatestaticKubernetes GetClient
{
KubernetesClientConfiguration config;
if(Environment.GetEnvironmentVariable( "ASPNETCORE_ENVIRONMENT") == "Development")
{
// 通过配置文件
config = KubernetesClientConfiguration.BuildConfigFromConfigFile( "./admin.conf");
}
else
{
// 通过默认的 Service Account 访问 , 必须在 kubernetes 中运行时才能使用
config = KubernetesClientConfiguration.BuildDefaultConfig;
}
returnnewKubernetes(config);
}
逻辑很简单 , 如果是开发环境 , 则使用 admin.conf 文件访问 , 如果是非开发环境 , 则 BuildDefaultConfig 自动获取访问凭证 , 此方式只在 Pod 中运行时有效 , 利用 Service Account 认证 。
下面测试一下 , 获取全部命名空间:
staticasyncTask Main
{
varclient = GetClient;
varnamespaces = awaitclient.ListNamespaceAsync;
foreach( varitem innamespaces.Items)
{
Console.WriteLine(item.Metadata.Name);
}
}
文章图片
好了!你已经会获取 Kubernetes 资源了 , 打开入门的第一步!秀儿!
客户端小知识
虽然打开了入门的第一步 , 但是不要急着使用各种 API, 这里我们来了解一下 Kubernetes 各种资源在客户端中的定义 , 和如何解析结构 。
首先 , 在 Kubernetes Client C# 的代码中 , 所有 Kubernetes 资源的模型类 , 都在 k8s.Models 中记录 。
如果我们要在 Kubernetes 中 , 查看一个对象的定义 , 如 kube-systtem命名空间的:
kubectl get namespace kube-system -o yaml
apiVersion:v1
kind:Namespace
metadata:
creationTimestamp:"2021-11-03T13:57:10Z"
labels:
kubernetes.io/metadata.name:kube-system
name:kube-system
resourceVersion:"33"
uid:f0c1f00d-2ee4-40fb-b772-665ac2a282d7
spec:
finalizers:
-kubernetes
status:
phase:Active
C# 中 , 模型的结构与其一模一样:
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
