kubernetes apiserver源码: 启动配置

69 阅读1分钟

如果在机器安装了go SDK,如何启动一个apiserver呢? 今天来解决这个问题,api-server的配置无疑是复杂的,本文提供一个成功的案例。

环境

ComponentVersion
go SDK1.17.6
kubernetesv1.21
etcdv3.5

完整配置

--etcd-servers=http://127.0.0.1:2379  
--service-account-issuer=https://kubernetes.default.svc.cluster.local
--service-account-key-file=/etc/kubernetes/pki/sa.pub
--service-account-signing-key-file=/etc/kubernetes/pki/sa.key
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt
--tls-private-key-file=/etc/kubernetes/pki/apiserver.key
--advertise-address=192.168.10.64

以上参数解释参考: kube-apiserver

证书生成

给apiserver生成证书文件,用于--tls-cert-filetls-private-key-file参数,分别代表证书和私钥。

参考: Generate Certificates Manually

我使用的openssl生成,其中有个坑就是csr.conf:

[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = CN
ST = Beijing
L = Beijing
O = Ink  # 公司组织名(随便填)
OU = RAD # 公司组织名(随便填)
CN = 192.168.10.64

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 192.168.10.64
IP.2 = 192.168.10.64

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names

生成这些证书和私钥之后,把它们放入配置路径中:

mkdir -p /etc/kubernetes/pki/
cp server.key /etc/kubernetes/pki/apiserver.key
cp server.crt /etc/kubernetes/pki/apiserver.crt

service-account

另一个需要证书的是SA, 这个是生成一对公私钥:

openssl genrsa -out sa.key 2048
openssl rsa -in sa.key --pubout -out sa.pub
cp sa* /etc/kubernetes/pki/

然后把上面那段参数配置粘贴到IDE里就可以启动了:

image.png

验证

简单使用etcd 验证下apiserver是否连上了:

# 应该会有一大坨输出
ETCDCTL_API=3 ./etcdctl get --prefix /registry