我正在尝试使用OpenShift服务器。当我使用时:
oc apply -f
我的请求已成功处理。
但是,我要用于开发的许多工具都期望kubectl
用于连接到集群。在大多数情况下,我可以毫无问题地使用kubectl
。
但是,在kubectl apply -f
的情况下,失败并显示错误:
Error from server (Forbidden): unknown
运行oc apply -f
时可以正常工作。
为尝试绕过此问题,我(在Windows上)创建了指向oc
可执行文件的名为“ kubectl”的符号链接。出乎意料的是,这导致oc
命令像kubectl
命令一样开始工作,并再次收到相同的错误。
调用链接的完整路径,以及简单地将“ oc.exe”重命名为“ kubectl.exe”都会产生相同的错误。我确认我确实通过运行kubectl version
来调用正确的bianry,并且从原始二进制文件与openshift包装器收到了不同的结果。
启用详细日志记录:kubectl apply -f service.yaml --v 6
给出此输出
I0625 13:09:43.873985 11744 loader.go:357] Config loaded from file C:\Users\username/.kube/config
I0625 13:09:44.175973 11744 round_trippers.go:436] GET https://myhost:443/swagger-2.0.0.pb-v1 403 Forbidden in 286 milliseconds
I0625 13:09:44.179974 11744 helpers.go:201] server response object: [{
"metadata": {},
"status": "Failure",
"message": "unknown",
"reason": "Forbidden",
"details": {
"causes": [
{
"reason": "UnexpectedServerResponse",
"message": "unknown"
}
]
},
"code": 403
}]
使用oc apply -f service.yaml --v 6
运行可获得几乎相同的结果,除了在出现最初的403错误之后,我得到以下输出:
I0625 13:37:19.403259 7228 round_trippers.go:436] GET https://myhost:443/api 200 OK in 5 milliseconds
命令继续正常工作。
无论如何,我是否可以绕过这种奇怪的行为,而以某种方式使用kubectl
在OpenShift服务器上成功运行kubectl apply -f
?
编辑:
oc
二进制包装器使用kubectl 1.9。
vanilla kubectl
命令使用1.10。
服务器是kubectl 1.6和openshift 3.6。
答案 0 :(得分:1)
您有什么客户端和服务器版本?
kubectl在创建/应用对象时尝试进行客户端验证。为此,它首先下载openapi模式。向较旧的服务器发出请求时,该端点可能无法识别,并可能导致“禁止”错误
在进行kubectl Apply调用时设置--validate=false
将绕过客户端验证(仍在执行服务器端验证)