client-go集群外认证k8s
除了认证外,还判断了操作系统。
且根据不同的系统,生成不同的文件。
在集群外认证时,使用的是k8s官方的方式,
而不是第三方库。
package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"runtime"
//"time"
"strings"
//"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/api/core/v1"
//"k8s.io/apimachinery/pkg/labels"
//"k8s.io/apimachinery/pkg/watch"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
//"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
//
// Uncomment to load all auth plugins
// _ "k8s.io/client-go/plugin/pkg/client/auth"
//
// Or uncomment to load specific auth plugins
// _ "k8s.io/client-go/plugin/pkg/client/auth/azure"
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
// _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
// _ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)
func main() {
// creates the in-cluster config
//config, err := rest.InClusterConfig()
//if err != nil {
// panic(err.Error())
//}
// creates the clientset
//clientset, err := kubernetes.NewForConfig(config)
//if err != nil {
// panic(err.Error())
//}
// creates the out-cluster config
var kubeconfig *string
if home := homeDir(); home != "" {
kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
} else {
kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
}
flag.Parse()
// use the current context in kubeconfig
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
if err != nil {
panic(err.Error())
}
// create the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
// get pods in all the namespaces by omitting namespace
// Or specify namespace to get pods in particular namespace
services, err := clientset.CoreV1().Services("").List(metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
for i := 0; i < len(services.Items); i++ {
item := services.Items[i].Annotations
for k, v := range item {
if strings.Contains(k, "getambassador") && strings.Contains(v, "ambassador") && strings.Contains(v, "Mapping") {
fmt.Println(v)
fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@")
}
}
}
//time.Sleep(10 * time.Second)
handleNewServices(clientset)
}
func handleNewServices(clientset *kubernetes.Clientset) {
for {
serviceStreamWatcher, err := clientset.CoreV1().Services("").Watch(metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
fmt.Printf("%T\n", serviceStreamWatcher)
for {
select {
case event := <-serviceStreamWatcher.ResultChan():
service := event.Object.(*v1.Service)
for key, value := range service.Annotations {
if strings.Contains(key, "getambassador") && strings.Contains(value, "ambassador") && strings.Contains(value, "Mapping") {
toFileStr := fmt.Sprintf("%s\n%s\n=============\n", event.Type, value)
//fmt.Println(toFileStr)
sysType := runtime.GOOS
absFilePath := ""
if sysType == "linux" {
absFilePath = "/app/k8s-ambassador"
} else {
absFilePath = "k8s-ambassador"
}
_appendToFile(absFilePath, toFileStr)
}
}
}
}
}
}
func _appendToFile(file, str string) {
f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0664)
if err != nil {
fmt.Printf("Cannot open file %s!\n", file)
return
}
defer f.Close()
f.WriteString(str)
}
func homeDir() string {
if h := os.Getenv("HOME"); h != "" {
return h
}
return os.Getenv("USERPROFILE") // windows
}
client-go集群外认证k8s的更多相关文章
- k8s暴露集群内和集群外服务的方法
集群内服务 一般 pod 都是根据 service 资源来进行集群内的暴露,因为 k8s 在 pod 启动前就已经给调度节点上的 pod 分配好 ip 地址了,因此我们并不能提前知道提供服务的 pod ...
- 部署开启了Kerberos身份验证的大数据平台集群外客户端
转载请注明出处 :http://www.cnblogs.com/xiaodf/ 本文档主要用于说明,如何在集群外节点上,部署大数据平台的客户端,此大数据平台已经开启了Kerberos身份验证.通过客户 ...
- service几种访问类型(集群外负载均衡访问LoadBalancer , 集群内访问ClusterIP,VPC内网负载均衡LoadBalancer ,集群外访问NodePort)
一.集群外访问(负载均衡) kind: ServiceapiVersion: v1spec: ports: - protocol: TCP port: 4341 targetPort: 8080 no ...
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
- 运行一个nodejs服务,先发布为deployment,然后创建service,让集群外可以访问
问题来源 海口-老男人 17:42:43 就是我要运行一个nodejs服务,先发布为deployment,然后创建service,让集群外可以访问 旧报纸 17:43:35 也就是 你的需求为 一个a ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
随机推荐
- ORACLE EXPIRED(GRACE)
查询用户状态col username for a20col account_status for a20select username,account_status,LOCK_DATE,EXPIRY_ ...
- MySQL的高级应用之Explain(完美详细版,看这一篇就够了)
原文链接: https://blog.csdn.net/wx1528159409/article/details/83819985
- Linux-3.14.12内存管理笔记【伙伴管理算法(1)】
前面分析了memblock算法.内核页表的建立.内存管理框架的构建,这些都是x86处理的setup_arch()函数里面初始化的,因地制宜,具有明显处理器的特征.而start_kernel()接下来的 ...
- CPU相关概念
整部主机的重点在于中央处理器 (Central Processing Unit, CPU),CPU 为一个具有特定功 能的芯片, 里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 ...
- go语言设计模式之abstract factory
这个代码太多了,调了一晚上. 只能立图证明我测试通过了哈. 真的是工厂的工厂,有点深.
- 0day2安全——笔记3
第二章 函数调用约定 不同的操作系统,语言和编译器调用函数的原理差不多,但是具体的调用约定有差异. C语言VC++编译的函数传参顺序如下图所示(默认使用__stdcall调用约定) 函数调用步骤(__ ...
- Day13- Python基础13 生产者与消费者模型,进程
本节内容: 1:生产者与消费者 2:进程调用两种 3:进程Process的方法 4:进程间的通信1 queue 队列 5:进程间的通信2 Pipe 管道 6:进程间的数据共享 Managers 7:进 ...
- poj 3253 Fence Repair 贪心 最小堆 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=3253 题解 本题是<挑战程序设计>一书的例题 根据树中描述 所有切割的代价 可以形成一颗二叉树 而最后的代价总和是与子节点和深 ...
- 如何理解Virtual DOM
什么是虚拟DOM 接下来用vdom(Virtual DOM)来简称为虚拟DOM. 指的是用JS模拟的DOM结构,将DOM变化的对比放在JS层来做.换而言之,虚拟DOM就是JS对象.如下DOM结构: & ...
- SpringBoot 和Vue前后端分离入门教程(附源码)
作者:梁小生0101 juejin.im/post/5c622fb5e51d457f9f2c2381 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计 ...