kubectl原始碼分析之auth can i

2021-10-07 05:09:10 字數 3633 閱讀 9317

課程內容:各種k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括開發測試環境部署k8s,和生產環境部署k8s。

介紹主要的k8s資源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,poddisruptionbudget,podsecuritypolicy,networkpolicy,resourcequota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerrevision等。

詳細介紹helm命令,學習helm chart語法,編寫helm chart。深入分析各專案原始碼,學習編寫helm外掛程式

第四個課程發布:

本課程將詳細介紹k8s所有命令,以及命令的go原始碼分析,學習知其然,知其所以然

————————————————

//建立auth命令

func newcmdauth(f cmdutil.factory, streams genericclioptions.iostreams) *cobra.command

cmds.addcommand(newcmdcani(f, streams))//新增can-i子命令

cmds.addcommand(newcmdreconcile(f, streams))//新增reconcile子命令

return cmds

}

type canioptions struct
//建立can-i命令

func newcmdcani(f cmdutil.factory, streams genericclioptions.iostreams) *cobra.command

cmd := &cobra.command else }}

cmdutil.checkerr(err)

},} cmd.flags().boolvarp(&o.allnamespaces, "all-namespaces", "a", o.allnamespaces, "if true, check the specified action in all namespaces.")//all-namespaces選項

cmd.flags().boolvarp(&o.quiet, "quiet", "q", o.quiet, "if true, suppress output and just return the exit code.")//quiet選項

cmd.flags().strin**ar(&o.subresource, "subresource", o.subresource, "subresource such as pod/log or deployment/scale")//subresource選項

cmd.flags().boolvar(&o.list, "list", o.list, "if true, prints all allowed actions.")//list選項

cmd.flags().boolvar(&o.noheaders, "no-headers", o.noheaders, "if true, prints allowed actions without headers")//no-headers選項

return cmd

}

//準備

func (o *canioptions) complete(f cmdutil.factory, args string) error

} else

switch len(args)

resourcetokens := strings.splitn(args[1], "/", 2)//用/分割

if err != nil

if len(resourcetokens) > 1

default:

return errors.new("you must specify two or three arguments: verb, resource, and optional resourcename")//報錯

} }var err error

client, err := f.kubernetesclientset()//獲取clientset

if err != nil

o.authclient = client.authorizationv1()//從clientset獲取authclient

o.discoveryclient = client.discovery()//從clientset獲取discoberyclient

o.namespace = ""//設定namespace為空

if !o.allnamespaces

} return nil

}

//校驗

func (o *canioptions) validate() error

return nil

} if o.nonresourceurl != ""

if o.resource != (schema.groupversionresource{}) || o.resourcename != ""

} else if !o.resource.empty() && !o.allnamespaces && o.discoveryclient != nil else

} }if o.noheaders

return nil

}

//執行list

func (o *canioptions) runaccesslist() error ,

} response, err := o.authclient.selfsubjectrulesreviews().create(sar)//應用selfsubjectrulesreview到服務端

if err != nil

return o.printstatus(response.status)//輸出結果

}

//執行check

func (o *canioptions) runaccesscheck() (bool, error) ,

},} } else ,

},} }

response, err := o.authclient.selfsubjectaccessreviews().create(sar)//應用selfsubjectaccessreview到服務端

if err != nil

if response.status.allowed else

if len(response.status.evaluationerror) > 0

fmt.fprintln(o.out)

} return response.status.allowed, nil

}

kubectl原始碼分析之rollout undo

課程內容 各種k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括開發測試環境部署k8s,和生產環境部署k8s。介紹主要的k8s資源的使用配置和命令。包括configmap,pod,service,replicaset,namespa...

kubectl原始碼分析之kustomize

istio多集群探秘,部署了50次多集群後我得出的結論 istio防故障利器,你知道幾個,istio新手不要讀,太難!istio業務許可權控制,原來可以這麼玩 istio實現非侵入壓縮,微服務之間如何實現壓縮 不懂envoyfilter也敢說精通istio系列 http rbac 不要只會用auth...

原始碼分析之LayoutInflater

簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...