- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 KubeSpray 在AWS上配置两个节点的集群。默认情况下,不使用--kubelet-certificate-authority
参数。但是,我想设置它。
我不知道--kubelet-certificate-authority
的正确设置。当我将其设置为/etc/kubernetes/pki/ca.crt
时,我在日志中会看到类似以下的消息:
TLS handshake error from 10.245.207.223:59278: remote error: tls: unknown certificate authority
为了创建隔离的测试环境,我通过SSH连接到 Controller 节点以运行此命令,该命令在
4667
的非标准端口上运行apiserver。我直接从
/etc/kubernetes/manifests/kube-apiserver.yaml
复制了这些值。您需要调整值以匹配您自己的集群。我故意在交互模式下运行容器,以便可以查看日志消息。
sudo docker run \
--name api-server-playground \
-it \
--rm \
--network host \
--volume /etc/kubernetes:/etc/kubernetes:ro \
--volume /etc/pki:/etc/pki:ro \
--volume /etc/ssl:/etc/ssl/:ro \
k8s.gcr.io/kube-apiserver:v1.18.9 \
kube-apiserver \
--advertise-address=10.245.207.223 \
--allow-privileged=true \
--anonymous-auth=True \
--apiserver-count=1 \
--authorization-mode=Node,RBAC \
--bind-address=0.0.0.0 \
--client-ca-file=/etc/kubernetes/ssl/ca.crt \
--cloud-config=/etc/kubernetes/cloud_config \
--cloud-provider=aws \
--enable-admission-plugins=NodeRestriction \
--enable-aggregator-routing=False \
--enable-bootstrap-token-auth=true \
--endpoint-reconciler-type=lease \
--etcd-cafile=/etc/ssl/etcd/ssl/ca.pem \
--etcd-certfile=/etc/ssl/etcd/ssl/node-ip-10-245-207-223.ec2.internal.pem \
--etcd-keyfile=/etc/ssl/etcd/ssl/node-ip-10-245-207-223.ec2.internal-key.pem \
--etcd-servers=https://10.245.207.119:2379 \
--event-ttl=1h0m0s \
--insecure-port=0 \
--kubelet-client-certificate=/etc/kubernetes/ssl/apiserver-kubelet-client.crt \
--kubelet-client-key=/etc/kubernetes/ssl/apiserver-kubelet-client.key \
--kubelet-preferred-address-types=InternalDNS,InternalIP,Hostname,ExternalDNS,ExternalIP \
--profiling=False \
--proxy-client-cert-file=/etc/kubernetes/ssl/front-proxy-client.crt \
--proxy-client-key-file=/etc/kubernetes/ssl/front-proxy-client.key \
--request-timeout=1m0s \
--requestheader-allowed-names=front-proxy-client \
--requestheader-client-ca-file=/etc/kubernetes/ssl/front-proxy-ca.crt \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--secure-port=6447 \
--service-account-key-file=/etc/kubernetes/ssl/sa.pub \
--service-cluster-ip-range=10.233.0.0/18 \
--service-node-port-range=30000-32767 \
--storage-backend=etcd3 \
--tls-cert-file=/etc/kubernetes/ssl/apiserver.crt \
--tls-private-key-file=/etc/kubernetes/ssl/apiserver.key
现在可以再次通过SSH进入 Controller ,并使用
curl
与自定义apiserver容器进行交互。
advertise-address
参数的值。 APISERVER=https://10.245.207.223:6447
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode); echo "TOKEN=$TOKEN"
curl --header "Authorization: Bearer $TOKEN" -X GET $APISERVER/api
错误消息将出现在docker日志中。它看起来像这样:
I0921 14:39:07.662368 1 log.go:172] http: TLS handshake error
from 10.245.207.223:59278: remote error: tls: unknown certificate authority
-k
curl参数绕过识别问题。 curl -k --header "Authorization: Bearer $TOKEN" -X GET $APISERVER/api
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.245.207.223:6447"
}
]
}
您会看到请求正常运行。但是,我不想使用
-k
参数。因此,我尝试使用apiserver中的证书颁发机构。
echo | \
openssl s_client -connect $APISERVER 2>/dev/null | \
openssl x509 -text | \
sed -n "/BEGIN CERTIFICATE/,/END CERTIFICATE/p" \
> apiserver.ca.crt
curl --cacert apiserver.ca.crt --header "Authorization: Bearer $TOKEN" -X GET $APISERVER/api
更新
curl
命令中使用了该文件。
curl --cacert /etc/kubernetes/ssl/ca.crt --header "Authorization: Bearer $TOKEN" -X GET $APISERVER/api
这工作了。
最佳答案
为了使--kubelet-certificate-authority
标志起作用,首先需要确保已启用Kubelet authentication和Kubelet authorization。之后,您可以遵循Kubernetes文档并设置TLS connection between the apiserver and kubelet。最后,您可以在主节点上编辑API服务器pod规范文件/etc/kubernetes/manifests/kube-apiserver.yaml
,并将--kubelet-certificate-authority
参数设置为证书颁发机构的证书文件的路径。
因此,总结一下要做的步骤是:
--anonymous-auth=false
标志启动kubelet--client-ca-file
标志启动kubelet,并提供一个CA bundle 包以使用以下命令验证客户端证书--kubelet-client-certificate
和--kubelet-client-key
标志启动apiserverauthentication.k8s.io/v1beta1
API组--authentication-token-webhook
和--kubeconfig flags
启动kubeletTokenReview
API,以从承载 token 中确定用户信息authorization.k8s.io/v1beta1
API组--authorization-mode=Webhook
和--kubeconfig
标志启动kubeletSubjectAccessReview
API,以确定每个请求是否得到授权--kubelet-certificate-authority
标志为apiserver提供一个根证书 bundle 包,用于验证kubelet的服务证书。 关于kubernetes - 如何正确设置--kubelet-certificate-authority apiserver参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63994701/
我正在尝试 enable a FlexVolume driver在 Ubuntu 上的 Microk8s 上。 为此,我似乎必须编辑 kubelet.service 文件。这应该存储在/etc/sys
我正在裸机 Debian 上运行 kubernetes(目前有 3 个 master、2 个worker、PoC)。我按照 k8s-the-hard-way 进行操作,但在 kubelet 上遇到了以
cgroup driver的配置在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf Environment="KUBELET_CGROUP_A
环境: Kubernetes 1.12.2 Docker 18.9.0 microk8s.kubectl $ k 得到所有 NAME
Kubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的
在运行 kubectl get nodes 等命令时出现以下错误: 与服务器 :6443 的连接被拒绝 - 您是否指定了正确的主机或端口? 我运行了 systemctl status kubelet.
我在 AWS 上安装了一堆新的 CentOS 服务器。服务 kubelet 尝试启动会污染日志文件(var/log/messages),但由于我没有用它,我想将其删除。这是 CentOS 的一个可选组
我在 kubelet 删除 docker 图像时遇到问题,因为它认为磁盘已满: Dec 29 18:00:14 hostname kubelet: I1229 18:00:14.548513 13
我想知道kubelet如何与docker容器通信。此配置在哪里定义?我进行了很多搜索,但没有发现任何有用的信息。我正在使用https kube API服务器。我可以创建 pods ,但不会产生容器吗?
https://kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/嗨,我在学习本教程时遇到了一些麻烦。建议使用 confi
我的两个集群节点获得 Kubelet stopped posting node status在 kubectl describe node有时。在该节点的日志中,我看到了这一点: Dec 11 12:
我在某些 kubernetes 节点上的 CentO 上遇到了 OOM 问题。我想像他们在演示中那样设置它: --kube-reserved is set to cpu=1,memory=2Gi,ep
Kubelet 出于对节点的保护,允许在节点资源不足的情况下,开启对节点上 Pod 进行驱逐的功能。最近对 Kubelet 的驱逐机制有所研究,发现其中有很多值得学习的地方,总结下来
如果我运行 systemctl restart kubelet它会影响其他正在运行的节点吗?它会停止集群吗?你能预见任何影响吗? 任何帮助,将不胜感激! 最佳答案 在回答之前,小声明:重启不是由于对
我正在尝试在 fedora 24/lxc 容器上启动 kubelet,但收到一个似乎与 libvirt/iptables 相关的错误 Docker(使用 dnf/yum 安装): [root@node
我尝试使用 堆叠我的 kubeadm 集群三 大师。我从我的 init 命令收到这个问题... [kubelet-check] Initial timeout of 40s passed. Unfor
我在我的 Ubuntu 机器上安装了 Kubernetes。出于某些调试目的,我需要查看 kubelet 日志文件(如果有任何此类文件)。 我看过 /var/logs但我找不到这样的文件。那可能在哪里
平台:OEL 7.7 + kube 1.15.5 + docker 19.03.1 我们正在使用容器化 kubelet 方法在 k8s 上构建一个纠删码对象存储。我们很难提出可行的磁盘生命周期方法。就
我有一个来自 kubelet 的奇怪行为,在集群启动后不久 kubelet 没有注册到 API 服务器。 有趣的是,如果我重新启动 kubelet 守护程序,它会正确注册并且一切都按预期工作,这让我相
我只想知道你们中的任何人以前是否曾经听过本教程并获得成功。 我不知道为什么,但是每当我在MINION端重新启动并启用服务时,它总是失败,并显示错误“kubelet.service的依赖项作业失败”,当
我是一名优秀的程序员,十分优秀!