如何解决创建/获取自定义kubernetes资源
我想用go创建一个自定义的kubernetes资源。该应用程序已部署在kubernetes集群中。我想创建例如后续资源:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: add-response-header
config:
add:
headers:
- "demo: injected-by-kong"
plugin: response-transformer
到目前为止,我一直创建“标准”资源,例如包含以下代码的秘密:
CreateSecret(name string,data map[string]string) error {
confs,err := rest.InClusterConfig()
if err != nil {
panic(err)
}
clientset,err = kubernetes.NewForConfig(confs)
i := clientset.CoreV1()
if _,err := i.Secrets(namespace).Create(&v1.Secret{
TypeMeta: metav1.TypeMeta{
Kind: "Secret",APIVersion: "v1",},ObjectMeta: metav1.ObjectMeta{
Name: name,StringData: data,Type: "Opaque",}); err != nil {
return err
}
}
此外,我尝试使用以下代码获取资源:
b,err := clientset.RESTClient().Get().Namespace(namespace).Resource("KongPlugin").DoRaw()
我得到以下错误:
the server could not find the requested resource (get KongPlugin)
如果我在命令行k get KongPlugin
上发出请求,则可以看到所有资源。
NAME PLUGIN-TYPE AGE
add-proxy-headers request-transformer 3h34m
那么如何查看自定义资源?
解决方法
对于RESTClient
??
获取:
您必须完全指定自定义资源的路径。
使用fluent
界面
data,err := clientset.RESTClient().
Get().
AbsPath("/apis/<api>/<version>").
Namespace("<namespace>").
Resource("kongplugins").
Name("kongplugin-sample").
DoRaw(context.TODO())
或手动指定
data,err := clientset.RESTClient().
Get().
AbsPath("/apis/<api>/<version>/namespaces/<namespace>/kongplugins/kongplugin-sample").
DoRaw(context.TODO())
您可以在AbsPath
的自定义资源中找到selfLink
。
创建:
例如,您可以post
使用AbsPath
封送数据
kongPlugin := &KongPlugin{
TypeMeta: metav1.TypeMeta{
APIVersion: "<api>/<version>",Kind: "KongPlugin",},ObjectMeta: metav1.ObjectMeta{
Name: "kongplugin-sample",Namespace: "<namespace>",...}}
body,err := json.Marshal(kongPlugin)
data,err := clientset.RESTClient().
Post().
AbsPath("/apis/<api>/<version>/namespaces/<namespace>/kongplugins").
Body(body).
DoRaw(context.TODO())
由于方法arg
的{{1}}是一个空接口,因此您可以根据文档使用不同类型的参数:
k8s.io/client-go/rest - func (*Request) Body
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。