client-go访问K8S集群之集群内认证

一、概述

    访问K8S集群出了使用客户端工具kubectl,还可以通过编写代码的方式来访问,其中需要使用官方提供的客户端依赖库client-go。

    通过client-go访问API Server首先就是需要认证。下面我们将通过client-go来编写一个示例小程序,完成认证后查询出默认命名空间default下的Pod,并打印出Pod的名字信息。

二、编码实现

1. 准备目录

mkdir in-cluster
cd in-cluster
touch main.go

代码逻辑将在main.go实现。

2. 代码实现

package main

import (
  "context"
  "log"
  "time"

  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  "k8s.io/client-go/kubernetes"
  "k8s.io/client-go/rest"
)

func main() {
  // 获取认证信息
  config, err := rest.InClusterConfig()
  if err != nil {
    log.Fatal(err)
  }

  // 创建客户端
  clientset, err := kubernetes.NewForConfig(config)
  if err != nil {
    log.Fatal(err)
  }

  for {
    // 查询default命名空间下的所有Pod
    pods, err := clientset.CoreV1().Pods("default").List(context.TODO(), metav1.ListOptions{})
    if err != nil {
      log.Fatal(err)
    }
    log.Printf("There are %d pods in cluster\n", len(pods.Items))
    for i, pod := range pods.Items {
      log.Printf("%d ---> %s/%s", i, pod.Namespace, pod.Name)
    }
    
    // 每10s查询一次
    <-time.Tick(10*time.Second)
  }
}

  在K8S中,创建Pod时会自动把ServiceAccount token信息挂载到容器内的固定目录下,目录为/var/run/secrets/kubernetes.io/serviceaccount,因此使用InClusterConfig()方法获取配置,实际就是读取这个目录下的token和ca.crt两个文件。

三、部署运行

1. 编译代码

GOOS=linux go build -o in-cluster main.go

2. 准备Dockerfile

vim Dockerfile

# 加入一下内容
FROM busybox

COPY ./in-cluster /app/in-cluster
ENTRYPOINT /app/in-cluster

3. 打包镜像

docker build -t in-cluster:v1 .

4. 创建ClusterRoleBindling

kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=default:default

5. 启动Pod

kubectl run -i in-cluster --image=in-cluster:v1

6. 查看结果

四、总结

    本章简单介绍了如何使用client-go通过集群内认证的方式访问K8S集群,从上面结果来看,我们最终从default命名空间下查到了所有的Pod。 

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对Go云原生课程感兴趣的读者,可以点击链接,详细查看详细的服务: https://ke.qq.com/course/422970?flowToken=1043281#term_id=100504894

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值