使用kubectl在Openshift服务器上“应用”运行时出现禁止的错误

时间:2018-06-25 17:40:11

标签: kubernetes openshift

我正在尝试使用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。

1 个答案:

答案 0 :(得分:1)

您有什么客户端和服务器版本?

kubectl在创建/应用对象时尝试进行客户端验证。为此,它首先下载openapi模式。向较旧的服务器发出请求时,该端点可能无法识别,并可能导致“禁止”错误

在进行kubectl Apply调用时设置--validate=false将绕过客户端验证(仍在执行服务器端验证)