环境准备

  • 下载kubernetes 1.24.15版本源码
  • etcd-v3.5.12 本机单机启动
  • apiserver启动入口:cmd/kube-apiserver/apiserver.go
  • k8s集群 apiserver配置文件:/etc/kubernetes/manifests/kube-apiserver.yaml

本地启动apiserver

参考 文档:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/

启动apiserver的脚本:

1
2
3
4
5
6
7
8
9
10
go run -mod=mod cmd/kube-apiserver/apiserver.go \
--etcd-servers=http://127.0.0.1:2379 \
--service-account-issuer=https://kubernetes.default.svc.cluster.local \
--authorization-mode=Node,RBAC \
--service-account-key-file=./certs/sa.pub \
--service-account-signing-key-file=./certs/sa.key \
--tls-cert-file=./certs/apiserver.crt \
--tls-private-key-file=./certs/apiserver.key \
--feature-gates=EphemeralContainers=true \
--service-cluster-ip-range=10.96.0.0/22

Kubernetes的service-account-key-file是一个重要的配置,用于签署Service Account令牌。这个文件包含的是私钥,Kubernetes API服务器使用它来签署生成的Service Account令牌。这些令牌再被用于Kubernetes集群内部的服务认证。

密钥生成:

1
2
openssl genrsa -out sa.key 2048
openssl rsa -in sa.key -pubout > sa.pub

在Kubernetes环境中,tls-cert-filetls-private-key-file是用于API服务器的TLS加密通信的证书文件和私钥文件。这些文件确保了Kubernetes API的安全通信。生成这些文件通常涉及到创建一个自签名的证书或者使用一个已经存在的证书颁发机构(CA)签发的证书。

生成证书:

1
2
3
4
5
6
7
8
9
# 生成私钥
openssl genrsa -out apiserver.key 2048

# 生成证书请求CSR
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kubernetes"

# 自签名证书
openssl x509 -req -in apiserver.csr -signkey apiserver.key -out apiserver.crt -days 365

直接启动apiserver的脚本,如果有报错需要解决错误,没有报错,直接访问:https://localhost:6443

这样 算是启动成功了

本地etcd启动没有加证书

1
2
# apiserver启动之后 查看本地etcd的key 
etcdctl get "" --prefix --keys-only