K8s API请求与kubeclient ruby gem一起返回错误请求(400)
我正在使用发出K8s API请求,它返回错误的请求(400) 我的代码:K8s API请求与kubeclient ruby gem一起返回错误请求(400),ruby,kubernetes,Ruby,Kubernetes,我正在使用发出K8s API请求,它返回错误的请求(400) 我的代码: 要求“kubeclient” 需要“json” 需要“open3” content=File.open(“nginx.yaml”).read p suffix_name=File.extname(“nginx.yaml”) 大小写后缀\u名称 那是什么时候 hash=YAML.safe\u加载(内容) p“yaml内容为:#{hash}” 那么“.json”是什么时候 hash=JSON.parse(内容) p“json内
要求“kubeclient”
需要“json”
需要“open3”
content=File.open(“nginx.yaml”).read
p suffix_name=File.extname(“nginx.yaml”)
大小写后缀\u名称
那是什么时候
hash=YAML.safe\u加载(内容)
p“yaml内容为:#{hash}”
那么“.json”是什么时候
hash=JSON.parse(内容)
p“json内容为:#{hash}”
结束
hash.each do |键、值|
放置“#{key}为:#{value}”
如果键==“种类”
@种类=值到下箱
结束
结束
config=Kubeclient::config.read(“rancher\u kube\u config.kubeconfig”)
kubeconfig\u text=File.read(“rancher\u kube\u config.kubeconfig”)
config\u context=Kubeclient::config.new(YAML.safe\u load(kubeconfig\u text),nil)
@config=config_context.instance_eval{@kcfg}
config=@config
部署=Kubeclient::Resource.new(散列)
cert_store=OpenSSL::X509::store.new
ssl_选项={
证书商店:证书商店,
验证\u ssl:OpenSSL::ssl::验证\u无
}
context=config\u context.context
验证选项={
承载令牌:context.auth\u选项[:承载令牌]
}
client=Kubeclient::client.new('https://{my_host}/k8s/clusters/c-h4mdn/api',auth_选项:auth_选项,ssl_选项:ssl_选项)
开始
@create_entity=client.send(“create#{@kind}”,部署)
rescue Kubeclient::HttpError=>e
体育课
@错误代码=e.错误代码
@message=e.message
结束
如果@create_entity.nil?
p“假”
其他的
p“成功”
结束
config.kubeconfig
的内容:
apiVersion: v1
kind: Config
clusters:
- name: "k8s"
cluster:
server: "https://MY_HOST/k8s/clusters/c-h4mdn"
certificate-authority-data: ...
- name: "k8s-k8smaster"
cluster:
server: "https://MY_HOST:6443"
certificate-authority-data: ...
users:
- name: "user-8lhbv"
user:
token: my_token
contexts:
- name: "k8s"
context:
user: "user-8lhbv"
cluster: "k8s"
- name: "k8s-k8smaster"
context:
user: "user-8lhbv"
cluster: "k8s-k8smaster"
current-context: "k8s"
nginx.yaml的内容
:
apiVersion: apps/v1
kind: Pod
metadata:
name: nginx-test2
labels:
app: nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
restartPolicy: Always
我得到的错误是,我认为可能是apiVersion
错误:
#<Kubeclient::HttpError: HTTP status code 400, Pod in version "v1" cannot be handled as a Pod: no kind "Pod" is registered for version "clusters/v1" in scheme "k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:29" for POST https://MY_HOST/k8s/clusters/c-h4mdn/api/v1/namespaces/default/pods>
#
我不确定kubeclient gem是否支持带有路径的服务器地址(MY_HOST/k8s/clusters/c-h4mdn/api/v1
而不是MY_HOST/api/v1
)。k8s客户端gem有(免责声明:我是作者之一)@Kimmo Lehto感谢您的回答,当我使用GET方法请求相同的路径时,我实际上可以得到结果,但是POST方法不起作用。我不确定kubeclient gem是否支持带路径的服务器地址(MY_HOST/k8s/clusters/c-h4mdn/api/v1
而不是MY_HOST/api/v1
).k8s客户端gem确实如此(免责声明:我是作者之一)@Kimmo Lehto感谢您的回答,当我使用GET方法请求相同的路径时,我实际上可以得到结果,但POST方法不起作用
#<Kubeclient::HttpError: HTTP status code 400, Pod in version "v1" cannot be handled as a Pod: no kind "Pod" is registered for version "clusters/v1" in scheme "k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:29" for POST https://MY_HOST/k8s/clusters/c-h4mdn/api/v1/namespaces/default/pods>