问题标签 [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.
kubernetes - 错误-Getsockopt:连接被拒绝 - Kubernetes apiserver
今天遇到一个意想不到的问题,今天早些时候我注意到“kubectl get pods”正在返回“无法连接到服务器:EOF”。经过进一步调查,我发现 Kubernetes apiserver 无法连接到 127.0.0.1:443。我一直无法解决这个问题,任何帮助将不胜感激。以下是我找到的日志。
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
kubeadm - kube-apiserver - 无效的承载令牌,令牌已失效
当我尝试启动 kube-apiserver 时,我得到以下日志:
当我尝试运行时kubectl get pods
::
我的 api 服务器配置:
Kube 控制器配置:
1.15.0
我在版本中使用 k8s
我想知道根本原因是什么 - 我如何刷新令牌以使 apiserver 正常运行?
kubernetes - 来自服务器的“kubectl top pods”错误(ServiceUnavailable):服务器当前无法处理请求(获取nodes.metrics.k8s.io)
当我尝试运行时,kubectl top nodes
我得到了输出:
指标服务器能够在获取指标的日志中抓取指标
但是缺少指标服务的端点,我该如何解决这个问题?
任何帮助将不胜感激!
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,但我怀疑出于同样的原因它不会工作。
有没有一种服务器端的方式来查询?非常感谢。
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
这些是可行的选择吗?还是我修改客户端的最佳选择?
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 中的服务端口范围?
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
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