问题标签 [kubernetes-apiserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
491 浏览

kubernetes - 错误-Getsockopt:连接被拒绝 - Kubernetes apiserver

今天遇到一个意想不到的问题,今天早些时候我注意到“kubectl get pods”正在返回“无法连接到服务器:EOF”。经过进一步调查,我发现 Kubernetes apiserver 无法连接到 127.0.0.1:443。我一直无法解决这个问题,任何帮助将不胜感激。以下是我找到的日志。

0 投票
2 回答
835 浏览

ssl - 永久替换 API 服务器证书

我有 microK8S 集群,并在我的域中公开 API 服务器。和in需要替换为包含我的域的那些server.crt。否则,正如预期的那样,我收到错误:server.key/var/snap/microk8s/1079/certs

Unable to connect to the server: x509: certificate is valid for kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster, kubernetes.default.svc.cluster.local, not mydonaim.com

在 cert-manager 的帮助下,我制作了证书并替换了它们,我的系统运行良好。

问题:每次重新启动服务器时,server.crt都会server.key/var/snap/microk8s/1079/certs. 我的自定义证书被删除,导致 API 服务器无法远程访问。我怎样才能阻止系统一直这样做?

解决方法? 我应该将我的证书放在其他地方并编辑配置文件,比如/var/snap/microk8s/1079/args/kube-controller-manager这些证书的路径吗?这些配置文件是否也会自动替换?

集群信息:

  • Kubernetes 版本:1.16.3
  • 正在使用的云:裸机、单节点
  • 集群安装方式:Ubuntu Server with Snaps
  • 主机操作系统:Ubuntu 18.04.3 LTS
0 投票
1 回答
347 浏览

kubernetes - Kubernetes 变异 webhook 服务器的 API 端点

如此处所述,这是在 kubernetes e2e 测试中使用的 webhook 服务器的参考实现。在main函数中,定义了许多端点来处理不同的突变请求。但是,没有关于何时调用哪个端点的明确文档。

那么,我们如何知道何时调用了哪个端点呢?

0 投票
0 回答
2229 浏览

kubeadm - kube-apiserver - 无效的承载令牌,令牌已失效

当我尝试启动 kube-apiserver 时,我得到以下日志:

当我尝试运行时kubectl get pods::

我的 api 服务器配置:

Kube 控制器配置:

1.15.0我在版本中使用 k8s

我想知道根本原因是什么 - 我如何刷新令牌以使 apiserver 正常运行?

0 投票
0 回答
3302 浏览

kubernetes - 来自服务器的“kubectl top pods”错误(ServiceUnavailable):服务器当前无法处理请求(获取nodes.metrics.k8s.io)

当我尝试运行时,kubectl top nodes我得到了输出:

指标服务器能够在获取指标的日志中抓取指标

但是缺少指标服务的端点,我该如何解决这个问题?

任何帮助将不胜感激!

0 投票
2 回答
9669 浏览

kubernetes - 如何使用 Kubernetes fieldSelector 查询 ownerReferences

Kubernetes GET API 是否真的支持fieldSelector参数来查询数组字段的值?

例如,我有一个像这样的 Pod:

我可以做类似的事情:

此命令失败 ( field label not supported: metadata.ownerReferences.uid)。我怀疑原因是ownerReferences数组字段本身。我也尝试过,但没有奏效:

  • metadata.ownerReferences[*].uid=
  • metadata.ownerReferences[].uid=

我可能会尝试用于 Kubernetes API 的 client-go SDK,但我怀疑出于同样的原因它不会工作。

有没有一种服务器端的方式来查询?非常感谢。

0 投票
2 回答
449 浏览

ssl - 如何在不修改 HTTP 客户端的情况下允许 API 访问 GKE K8S 集群

我在 GKE 上搭建了一个 k8s 集群。

我想通过 k8s REST API 来控制它(因此,查看 pod 上的部署等等,但不访问通过 SSL 在 k8s 集群上实际运行的内容)。我已经获得了适当的不记名令牌(curl --insecure [request]作品)并且可以发出 API 请求。但是,SSL 证书对我的客户端无效(如果重要的话,它是 java)。我目前无法轻易修改客户端以接受新的根证书。

我一直在挖掘并检查以下三个选项:

  • 将集群的根 CA 证书合并到我的客户端中已经存在的另一个证书链中(根据我对 TLS 的有限理解,我不确定这是否可能)。
  • 替换集群根 CA 证书(这样我就可以使用我的客户端在其密钥库中的东西)。意味着您可以使用 vanilla k8s 执行此操作,但这意味着您不能使用 GKE:“内部 Google 服务管理此 CA 的根密钥,这些密钥是不可导出的。”
  • 允许没有 TLS 的 k8s API 访问。我在文档中没有看到任何关于此的内容,其中非常明确地表明通过网络访问 k8s API 必须使用 TLS

这些是可行的选择吗?还是我修改客户端的最佳选择?

0 投票
1 回答
682 浏览

kubernetes - Kubernetes 失去了增强的服务端口范围

我正在 macOS 10.15.3 下测试 kubernetes minikube/influxdb/grafana 堆栈。我正在命令行上工作。

系统环境:

  • MacOS 10.15.3 /bin/bash (darwin19)
  • Minikube 1.7.2,通过下载

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64

我通过 shell 脚本启动 minikube

minikube 回应

所以我假设服务端口 3000-61616 在 minikube 中可用。

我通过应用 yaml 代码创建了 Grafana 服务的一些 shell 脚本行:

产生:

看起来,服务端口范围以某种方式被重置。Grafana 部署和其他部署,以及 influxDB 和 telegraf 服务(不是“NodePort”类型!)不会引起问题。相同的代码在标准的 linux 系统上不会导致此类问题。

现在有几个问题:

  • 如何显示服务节点端口范围的当前状态?
  • 为什么/在哪里可以更改服务范围?
  • 作为解决方法:如何更新正在运行的节点/kube-api 中的服务端口范围?
0 投票
1 回答
884 浏览

kubernetes - Kubernetes CRDs - 参考现有的验证规范

有没有办法访问现有的验证规范?例如,我希望能够在我的 CRD 上设置 NodeAffinity,并且只想设置 $ref: 。我在这里找到了整个 API:https ://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json 或 kubectl proxy -> localhost:8001/openapi/v2(来自我的集群)

我可以手动复制粘贴 api 验证模式,但我想知道是否有一种方法可以使用 $ref 从我的 CRD 中自动引用现有的 OpenAPI 验证规范。我想像 $ref: localhost:8001/openapi/v2/definitions/io.k8s.api.core.v1.NodeAffinity

如果这是可能的,它是否也会解决内部的 $refs ?

作为参考,以下是 API 中的 nodeaffinity 定义:

(使用带有 Ansible 的 Operator-SDK,以防万一)

编辑:(添加一个完整的例子来进一步解释)

我有一个名为 Workshop 的 CRD,我需要对某些规格参数进行验证。

现在我需要添加一个 nodeAffinity 规范字段,该字段将应用于此 CustomResourceDefinition 下的任何 pod。它的验证将与 Pod 中的 nodeAffinity 验证完全相同。

让我从以下网址提取已经在 OpenApi 中编写的验证规范:https ://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json 并将其转换为 YAML,然后将其添加到我的规范中.

哇,为了验证一个字段(及其子字段),我的 CRD 定义增加了 100 多行,所有这些都只是为了重新实现 Kubernetes 原生 pod api 定义中已经存在的东西。手动复制粘贴并手动解析 Kubernetes 规范中的所有引用也需要大约 15 分钟。这不是很有意义吗:

A) 将此长 API 规范存储在外部文件中,并使用 $ref: externalfile.json 将其拉入以保持我的 CRD 小而干净。

或者更好

B) 使用 $ref 标签插入已经存在的实际 Kubernetes 原生验证规范,如下所示:

回到 30 行左右的代码,并且验证规范与 Kubernetes 原生验证保持同步,因为它从 Kubernetes API 本身提取信息。据此,应该支持 $ref 这样做:https ://swagger.io/docs/specification/using-ref/#syntax

0 投票
1 回答
260 浏览

php - 如何使用 Kubernetes API 处理流响应?

当我直接在我的 pod 中 ssh 并在命令行上运行以下命令时:它可以工作并以流的形式curl -v --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc.cluster.local/apis/batch/v1/watch/namespaces/kludge/jobs/api-job-12返回指定作业 ( ) 的所有更新。api-job-12

但是,当我在我的应用程序级代码中时,我无法让 API 流式传输响应(请求超时而根本没有响应)。我在 PHP(Laravel) 环境中工作,我正在为我的 http 客户端使用 Guzzle。

这是我的代码:

当我转储时,$response->getBody()我得到以下信息:

它看起来确实是一个流对象,但该对象说它没有要读取的字节并且它不可搜索。有人对我如何在这里使用 PHP 获得流响应有任何想法吗?

这是我正在调用的 Kubernetes API 端点: https ://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#watch-47