เดเตเดฑเดฟเดชเตเดชเต. เดตเดฟเดตเตผเดคเตเดคเดจเด.: เดเดฟเดฒ เดเดตเดจเตเดฑเตเดเตพ เดธเดเดญเดตเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเดฌเตโเดเดเตโเดฑเตเดฑเตเดเดณเดฟเดฒเต เดชเดคเดฟเดตเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดเต เดจเดฟเตผเดตเตเดตเดนเดฃเด เดเดเตเดเตเดฎเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดพเตป เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเดฟเดจเตเดฑเต เดธเดนเดพเดฏ เดธเตเดซเตเดฑเตเดฑเตโเดตเตเดฏเดฑเดพเดฃเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเตผ. เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเดฐเต เดเตเดฑเดฟเดเตเดเต เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดเดดเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต
เดเตเดฌเตเตผเดจเตเดฑเตเดฑเดธเดฟเดจเดพเดฏเดฟ เดเดฐเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป เดเดฃเตเดเตเดคเตเดคเดพเดจเตเดณเตเดณ เดเดจเตเดฑเต เดถเตเดฐเดฎเดเตเดเตพเดเตเดเต เดถเตเดทเด เดเดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดเตเดตเดฟเดค เดเดฆเดพเดนเดฐเดฃเดคเตเดคเตเดเต เด เดชเตเดธเตเดฑเตเดฑเต เดเดดเตเดคเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต, เด
เดคเต เดเตเดกเต เดชเด เดฟเดเตเดเต.
เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฆเดพเดนเดฐเดฃเด เดเดคเดพเดฃเต: เดเดเตเดเดณเตเดเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ, เดเดฐเตเดจเตเดจเตเด Namespace
เดเดฐเต เดเตเดฎเดฟเดจเตเดฑเต เดธเดพเตปเดกเตโเดฌเตเดเตโเดธเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเต เดชเตเดฐเดคเดฟเดจเดฟเดงเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเดฎเตเดเตพเดเตเดเต เด
เดตเดฐเตเดเต เดธเตเดตเดจเตเดคเด เดธเดพเตปเดกเตโเดฌเตเดเตโเดธเตเดเดณเดฟเตฝ เดฎเดพเดคเตเดฐเด เดเดณเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเตฝ เด
เดตเดฐเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดเตโเดธเดธเต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเตเดเตเดคเตเดคเดพเตป เดเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเต.
เดเดฐเต เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต เดเดณเตเดณ เดเดฐเต เดเตเดฐเตเดชเตเดชเดฟเดจเต เดจเดฟเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดตเดถเตเดฏเดฎเตเดณเตเดณเดคเต เดจเตเดเดพเดจเดพเดเตเด RoleBinding
เดชเตเดฐเดคเตเดฏเตเดเด Namespace
ะธ ClusterRole
เดเดกเดฟเดฑเตเดฑเดฟเดเดเต เด
เดตเดเดพเดถเดเตเดเตพเดเตเดเตเดชเตเดชเด. YAML เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเด เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเด:
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: kubernetes-team-1
namespace: team-1
subjects:
- kind: Group
name: kubernetes-team-1
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: edit
apiGroup: rbac.authorization.k8s.io
(
เดเดฐเตเดฃเตเดฃเด เดเดฃเตเดเดพเดเตเดเตเด RoleBinding
เดจเดฟเดเตเดเตพเดเตเดเต เดเดคเต เดธเตเดตเดฎเตเดงเดฏเดพ เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด, เดเดจเตเดจเดพเตฝ เดจเตเดฑเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเต เดเดเดจเตเดจเดคเดฟเดจเต เดถเตเดทเด, เดเดคเต เดฎเดเตเดชเตเดชเดฟเดเตเดเตเดจเตเดจ เดเตเดฒเดฟเดฏเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต. เดเดตเดฟเดเตเดฏเดพเดฃเต เดเตเดฌเตผเดจเตเดฑเตเดฑเตเดธเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเตผ เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดเตเดจเตเดจเดคเต - เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเต เดฎเดพเดฑเตเดฑเดเตเดเดณเต เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ เดเตเดฌเตผเดจเตเดฑเตเดฑเตเดธเต เดเดฑเดตเดฟเดเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดเตเดเตเดฎเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดพเตป เด
เดตเตผ เดจเดฟเดเตเดเดณเต เด
เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เดเดเตเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต RoleBinding
เดธเตเดทเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ Namespace
.
เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดจเดฎเตเดเตเดเต เดซเดเดเตเดทเตป เดจเดฟเตผเดตเดเดฟเดเตเดเดพเด main
เดเดคเต เดธเตเดฑเตเดฑเตเดฑเตเดฑเตเดฎเตเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดธเดเตเดเตเดเดฐเดฃเด เดเตเดฏเตเดฏเตเดเดฏเตเด เดคเตเดเตผเดจเตเดจเต เดธเตเดฑเตเดฑเตเดฑเตเดฑเตเดฎเตเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต เดตเดฟเดณเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต:
(เดเตเดฑเดฟเดชเตเดชเต. เดตเดฟเดตเตผเดคเตเดคเดจเด.: เดเดตเดฟเดเตเดฏเตเด เดคเดพเดดเตเดฏเตเด เดเตเดกเดฟเดฒเต เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเตพ เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเดฒเตเดเตเดเต เดตเดฟเดตเตผเดคเตเดคเดจเด เดเตเดฏเตเดคเดฟเดเตเดเตเดฃเตเดเต. เดเตเดเดพเดคเต, Habr เดฒเตเดเดเตเดเดฟเดจเตเดณเตเดณเดฟเดฒเต เดฎเดฟเดเดเตเด เดตเดพเดฏเดจเดพเดเตเดทเดฎเดคเดฏเตเดเตเดเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด [Go-เตฝ เดถเตเดชเดพเตผเดถ เดเตเดฏเตโเดค] เดเดพเดฌเตเดเตพเดเตเดเต เดชเดเดฐเด เดธเตโเดชเตเดฏเตโเดธเตเดเดณเดฟเดฒเตเดเตเดเต เดเตปเดกเดจเตเดฑเตเดทเตป เดถเดฐเดฟเดฏเดพเดเตเดเดฟ. เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเดฟเดเดเดฟเดจเตเด เดถเตเดทเด, GitHub-เตฝ เดเดฑเดฟเดเดฟเดจเดฒเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฒเดฟเดเตเดเตเดเตพ เดเดฃเตเดเต, เด เดตเดฟเดเต เดเดเดเตเดฒเตเดทเต เดญเดพเดทเดฏเดฟเดฒเตเดณเตเดณ เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเดณเตเด เดเดพเดฌเตเดเดณเตเด เดธเดเดญเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.)
func main() {
// ะฃััะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฒัะฒะพะด ะปะพะณะพะฒ ะฒ ะบะพะฝัะพะปัะฝัะน STDOUT
log.SetOutput(os.Stdout)
sigs := make(chan os.Signal, 1) // ะกะพะทะดะฐะตะผ ะบะฐะฝะฐะป ะดะปั ะฟะพะปััะตะฝะธั ัะธะณะฝะฐะปะพะฒ ะะก
stop := make(chan struct{}) // ะกะพะทะดะฐะตะผ ะบะฐะฝะฐะป ะดะปั ะฟะพะปััะตะฝะธั ััะพะฟ-ัะธะณะฝะฐะปะฐ
// ะ ะตะณะธัััะธััะตะผ ะฟะพะปััะตะฝะธะต SIGTERM ะฒ ะบะฐะฝะฐะปะต sigs
signal.Notify(sigs, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
// Goroutines ะผะพะณัั ัะฐะผะธ ะดะพะฑะฐะฒะปััั ัะตะฑั ะฒ WaitGroup,
// ััะพะฑั ะทะฐะฒะตััะตะฝะธั ะธั
ะฒัะฟะพะปะฝะตะฝะธั ะดะพะถะธะดะฐะปะธัั
wg := &sync.WaitGroup{}
runOutsideCluster := flag.Bool("run-outside-cluster", false, "Set this flag when running outside of the cluster.")
flag.Parse()
// ะกะพะทะดะฐะตะผ clientset ะดะปั ะฒะทะฐะธะผะพะดะตะนััะฒะธั ั ะบะปะฐััะตัะพะผ Kubernetes
clientset, err := newClientSet(*runOutsideCluster)
if err != nil {
panic(err.Error())
}
controller.NewNamespaceController(clientset).Run(stop, wg)
<-sigs // ะะดะตะผ ัะธะณะฝะฐะปะพะฒ (ะดะพ ะฟะพะปััะตะฝะธั ัะธะณะฝะฐะปะฐ ะฑะพะปะตะต ะฝะธัะตะณะพ ะฝะต ะฟัะพะธัั
ะพะดะธั)
log.Printf("Shutting down...")
close(stop) // ะะพะฒะพัะธะผ goroutines ะพััะฐะฝะพะฒะธัััั
wg.Wait() // ะะถะธะดะฐะตะผ, ััะพ ะฒัะต ะพััะฐะฝะพะฒะปะตะฝะพ
}
(
เดเดเตเดเตพ เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดเตเดฏเตเดฏเตเดจเตเดจเต:
- เดจเดฟเตผเดฆเดฟเดทเตเด เดเดชเตเดชเดฑเตเดฑเตเดฑเดฟเดเดเต เดธเดฟเดธเตเดฑเตเดฑเด เดธเดฟเดเตเดจเดฒเตเดเตพเดเตเดเดพเดฏเดฟ เดเดเตเดเตพ เดเดฐเต เดนเดพเตปเดกเตโเดฒเตผ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเต.
- เดเดเตเดเตพ เดเดชเดฏเตเดพเดเดฟเดเตเดเตเดจเตเดจเต
WaitGroup
เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เด เดตเดธเดพเดจเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดเดฒเตเดฒเดพ เดเตเดฑเตเดเตเดเตเดจเตเดเดณเตเด เดฎเดจเตเดนเดฐเดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเตเด. - เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดเดเตเดเตพ เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเตเดเตเดเต เดเดเตเดธเดธเต เดจเตฝเดเตเดจเตเดจเต
clientset
. - เดฒเตเดเตเดเต
NamespaceController
, เด เดคเดฟเตฝ เดจเดฎเตเดฎเตเดเต เดเดฒเตเดฒเดพ เดฏเตเดเตเดคเดฟเดฏเตเด เดธเตเดฅเดฟเดคเดฟเดเตเดฏเตเดฏเตเด.
เดเดชเตเดชเตเตพ เดจเดฎเตเดเตเดเต เดฏเตเดเตเดคเดฟเดเตเดเต เดเดฐเต เด
เดเดฟเดธเตเดฅเดพเดจเด เดเดตเดถเตเดฏเดฎเดพเดฃเต, เดเดเตเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดเดคเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดคเดพเดฃเต NamespaceController
:
// NamespaceController ัะปะตะดะธั ัะตัะตะท Kubernetes API ะทะฐ ะธะทะผะตะฝะตะฝะธัะผะธ
// ะฒ ะฟัะพัััะฐะฝััะฒะฐั
ะธะผะตะฝ ะธ ัะพะทะดะฐะตั RoleBinding ะดะปั ะบะพะฝะบัะตัะฝะพะณะพ namespace.
type NamespaceController struct {
namespaceInformer cache.SharedIndexInformer
kclient *kubernetes.Clientset
}
// NewNamespaceController ัะพะทะดะฐะตั ะฝะพะฒัะน NewNamespaceController
func NewNamespaceController(kclient *kubernetes.Clientset) *NamespaceController {
namespaceWatcher := &NamespaceController{}
// ะกะพะทะดะฐะตะผ ะธะฝัะพัะผะตั ะดะปั ัะปะตะถะตะฝะธั ะทะฐ Namespaces
namespaceInformer := cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
return kclient.Core().Namespaces().List(options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
return kclient.Core().Namespaces().Watch(options)
},
},
&v1.Namespace{},
3*time.Minute,
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc},
)
namespaceInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: namespaceWatcher.createRoleBinding,
})
namespaceWatcher.kclient = kclient
namespaceWatcher.namespaceInformer = namespaceInformer
return namespaceWatcher
}
(
เดเดตเดฟเดเต เดเดเตเดเตพ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเต SharedIndexInformer
, เดเดคเต เดซเดฒเดคเตเดคเดฟเตฝ (เดเดฐเต เดเดพเดทเต เดเดชเดฏเตเดเดฟเดเตเดเต) เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเดฒเต เดฎเดพเดฑเตเดฑเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเด (เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดตเดฟเดตเดฐเด เดจเตฝเดเตเดจเตเดจเดตเดฐเต เดเตเดฑเดฟเดเตเดเต เดเตเดเตเดคเตฝ เดตเดพเดฏเดฟเดเตเดเตเด "EventHandler
เดตเดฟเดตเดฐเดฎเดฑเดฟเดฏเดฟเดเตเดเตเดจเตเดจเดฏเดพเตพเดเตเดเต, เด
เดเตเดเดจเต เดเดฐเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเตเตผเดเตเดเตเดฎเตเดชเตเตพ (Namespace
) เดซเดเดเตเดทเตป เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต createRoleBinding
.
เด เดซเดเดเตเดทเตป เดจเดฟเตผเดตเดเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เด
เดเตเดคเตเดค เดเดเตเดเด createRoleBinding
:
func (c *NamespaceController) createRoleBinding(obj interface{}) {
namespaceObj := obj.(*v1.Namespace)
namespaceName := namespaceObj.Name
roleBinding := &v1beta1.RoleBinding{
TypeMeta: metav1.TypeMeta{
Kind: "RoleBinding",
APIVersion: "rbac.authorization.k8s.io/v1beta1",
},
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("ad-kubernetes-%s", namespaceName),
Namespace: namespaceName,
},
Subjects: []v1beta1.Subject{
v1beta1.Subject{
Kind: "Group",
Name: fmt.Sprintf("ad-kubernetes-%s", namespaceName),
},
},
RoleRef: v1beta1.RoleRef{
APIGroup: "rbac.authorization.k8s.io",
Kind: "ClusterRole",
Name: "edit",
},
}
_, err := c.kclient.Rbac().RoleBindings(namespaceName).Create(roleBinding)
if err != nil {
log.Println(fmt.Sprintf("Failed to create Role Binding: %s", err.Error()))
} else {
log.Println(fmt.Sprintf("Created AD RoleBinding for Namespace: %s", roleBinding.Name))
}
}
(
เดจเดฎเตเดเตเดเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดชเตเดฐเดเดพเดฐเด เดฒเดญเดฟเดเตเดเตเดจเตเดจเต obj
เด
เดคเดฟเดจเต เดเดฐเต เดตเดธเตเดคเตเดตเดพเดเตเดเดฟ เดฎเดพเดฑเตเดฑเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด Namespace
. เด
เดชเตเดชเตเตพ เดเดเตเดเตพ เดจเดฟเตผเดตเดเดฟเดเตเดเตเดจเตเดจเต RoleBinding
, เดจเตฝเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฌเตเดเดเตเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ เดธเตเดเดฟเดชเตเดชเดฟเดเตเด YAML เดซเดฏเดฒเดฟเดจเต เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ Namespace
เดธเตเดทเตเดเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต RoleBinding
. เด
เดตเดธเดพเดจเด, เดธเตเดทเตเดเดฟ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฃเต เดเดจเตเดจเต เดเดเตเดเตพ เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต.
เดจเดฟเตผเดตเดเดฟเดเตเดเตเดฃเตเด เด
เดตเดธเดพเดจ เดซเดเดเตเดทเตป Run
:
// Run ะทะฐะฟััะบะฐะตั ะฟัะพัะตัั ะพะถะธะดะฐะฝะธั ะธะทะผะตะฝะตะฝะธะน ะฒ ะฟัะพัััะฐะฝััะฒะฐั
ะธะผัะฝ
// ะธ ะดะตะนััะฒะธั ะฒ ัะพะพัะฒะตัััะฒะธะธ ั ััะธะผะธ ะธะทะผะตะฝะตะฝะธัะผะธ.
func (c *NamespaceController) Run(stopCh <-chan struct{}, wg *sync.WaitGroup) {
// ะะพะณะดะฐ ััะฐ ััะฝะบัะธั ะทะฐะฒะตััะตะฝะฐ, ะฟะพะผะตัะธะผ ะบะฐะบ ะฒัะฟะพะปะฝะตะฝะฝัั
defer wg.Done()
// ะะฝะบัะตะผะตะฝัะธััะตะผ wait group, ั.ะบ. ัะพะฑะธัะฐะตะผัั ะฒัะทะฒะฐัั goroutine
wg.Add(1)
// ะัะทัะฒะฐะตะผ goroutine
go c.namespaceInformer.Run(stopCh)
// ะะถะธะดะฐะตะผ ะฟะพะปััะตะฝะธั ััะพะฟ-ัะธะณะฝะฐะปะฐ
<-stopCh
}
(
เดเดตเดฟเดเต เดจเดฎเตเดฎเตพ เดธเดเดธเดพเดฐเดฟเดเตเดเตเดจเตเดจเต WaitGroup
เดเดเตเดเตพ เดเตเดฑเตเดเตเดเดฟเตป เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เดคเตเดเตผเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต namespaceInformer
, เดฎเตเดฎเตเดชเต เดจเดฟเตผเดตเดเดฟเดเตเดเดชเตเดชเตเดเตเดเดคเต. เดธเตเดฑเตเดฑเตเดชเตเดชเต เดธเดฟเดเตเดจเตฝ เดเดคเตเดคเตเดฎเตเดชเตเตพ, เด
เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เด
เดตเดธเดพเดจเดฟเดชเตเดชเดฟเดเตเดเตเด, เด
เดฑเดฟเดฏเดฟเดเตเดเตเด WaitGroup
, เด
เดคเต เดเดจเดฟ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดฏเดฟเดฒเตเดฒ, เด เดซเดเดเตเดทเตป เดชเตเดฑเดคเตเดคเตเดเดเดเตเดเตเด.
เดเดฐเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เด เดชเตเดฐเดธเตเดคเดพเดตเดจ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเตเด เดธเดเดฌเดจเตเดงเดฟเดเตเด เดตเดฟเดตเดฐเดเตเดเตพ เดเดฃเตเดเตเดคเตเดคเดพเดจเดพเดเตเด
เด
เดคเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจ เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดเตเดเตเดณเตเดณเดคเดพเดฃเต RoleBinding
เดเดชเตเดชเตเดพเตพ Namespace
เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ, เดคเดฏเตเดฏเดพเดฑเดพเดฃเต.
เด
เดตเดฒเดเดฌเด: www.habr.com