k8s集群证书过期(kubeadm 1.10.2 )

 

1、k8s 集群架构描述

  • kubeadm v1.10.2创建k8s集群。
  • master节点高可用,三节点(10.18.60.3、10.18.60.4、10.18.60.5)。
  • LVS实现master三节点代理。

 

2、K8S集群证书过期,日志报错如下

Unable to authenticate the request due to an error: x509: certificate has expired or is not yet valid

 

3、故障排定,查看证书

# openssl x509 -noout -text -in apiserver-kubelet-client.crt | grep Not
            Not Before: May 22 01:58:06 2018 GMT
            Not After : May 22 01:58:07 2019 GMT    # 2019-5-22日过期

  

4、kubeadm 命令介绍(v1.10.2)  

注:本次只需用到以下两个参数命令,其它参数不做介绍

# kubeadm alpha phase certs -h        # 创建证书
Usage:
  kubeadm alpha phase certs [command]
Available Commands:
  all                      Generates all PKI assets necessary to establish the control plane
  apiserver                Generates an API server serving certificate and key
  apiserver-etcd-client    Generates a client certificate for the API server to connect to etcd securely
  apiserver-kubelet-client Generates a client certificate for the API server to connect to the kubelets securely
  ca                       Generates a self-signed kubernetes CA to provision identities for components of the cluster
  etcd-ca                  Generates a self-signed CA to provision identities for etcd
  etcd-healthcheck-client  Generates a client certificate for liveness probes to healthcheck etcd
  etcd-peer                Generates an etcd peer certificate and key
  etcd-server              Generates an etcd serving certificate and key
  front-proxy-ca           Generates a front proxy CA certificate and key for a Kubernetes cluster
  front-proxy-client       Generates a front proxy CA client certificate and key for a Kubernetes cluster
  sa                       Generates a private key for signing service account tokens along with its public key


# kubeadm alpha phase kubeconfig -h    # 生成配置文件(例如:admin.conf|controller-manager.conf|kubelet.conf|scheduler.conf)
Usage:
  kubeadm alpha phase kubeconfig [command]
Available Commands:
  admin              Generates a kubeconfig file for the admin to use and for kubeadm itself
  all                Generates all kubeconfig files necessary to establish the control plane and the admin kubeconfig file
  controller-manager Generates a kubeconfig file for the controller manager to use
  kubelet            Generates a kubeconfig file for the kubelet to use. Please note that this should be used *only* for bootstrapping purposes.
  scheduler          Generates a kubeconfig file for the scheduler to use
  user               Outputs a kubeconfig file for an additional user

# kubeadm alpha phase certs apiserver -h
      --apiserver-advertise-address string   填写本机apiserver ip。
      --apiserver-cert-extra-sans strings    多master节点,在创建apiserver证书时,需要指定每个节点的IP,代理IP、域名。
      --cert-dir string                      The path where to save the certificates (default "/etc/kubernetes/pki")
      --config string                        Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
      -h, --help                                 help for apiserver
      --service-cidr string                  Alternative range of IP address for service VIPs, from which derives the internal API server VIP that will be added to the API Server serving cert (default "10.96.0.0/12")
      --service-dns-domain string            Alternative domain for services, to use for the API server serving cert (default "cluster.local")  

 

5、备份节点配置文件与证书

# cp -rfp /etc/kubernetes /etc/kubernetes.2019.5.23  

6、创建证书

注:

    1、因为之前三个master节点的配置文件中全部填写的是LVS VIP(没做域名解析),为了今后切换方便给VIP配置了一个域名,而apiserver证书中没有配置该域名的认证,所以利用openssl对apiserver证书做了重签替换,并设置apiserver证书有效期10年,所以这次证书过期不涉及apiserver,只需要对apiserver-kubelet-client与front-proxy-client证书重新创建,而下边给出了对apiserver证书重签的命令。

 2、创建证书时需要配置VPN,kubeadm需要连接国外

# kubeadm alpha phase certs apiserver --apiserver-advertise-address 10.18.60.3 --apiserver-cert-extra-sans 10.18.60.4 --apiserver-cert-extra-sans 10.18.60.5 --apiserver-cert-extra-sans 10.16.60.6 --apiserver-cert-extra-sans k8s.m.api   # 创建apiserver证书
# kubeadm alpha phase certs apiserver-kubelet-client				  # 创建apiserver-kubelet-client证书
# kubeadm alpha phase certs front-proxy-client					  # 创建front-proxy-client证书

 

7、创建配置文件(admin.conf|controller-manager.conf|kubelet.conf|scheduler.conf)

# 创建完会看到/etc/kubernetes下面出现了配置文件
# kubeadm alpha phase kubeconfig all --apiserver-advertise-address 10.18.60.3 

  

8、准备替换

因为我三节点的代理IP配置了域名,所以需要做下替换。

# sed -i 's/10\.18\.60\.3/k8s.m.api/g' admin.conf
# sed -i 's/10\.18\.60\.3/k8s.m.api/g' controller-manager.conf
# sed -i 's/10\.18\.60\.3/k8s.m.api/g' scheduler.conf
# sed -i 's/10\.5\.38\.39/k8s.m.api/g' kubelet.conf
# grep 'host:' /etc/kubernetes/manifests/kube-apiserver.yaml 
        host: k8s.m.api

 

# 直接覆盖(注意文件权限)
# cp -rfp /etc/kubernetes/admin.conf ~/.kube/config

    

# kubelet 客户端签发的不需要备份
# rm -rf /var/lib/kubelet/pki/*

  

9、重启服务

# 重启本机所有docker容器
# docker restart $(docker ps -q)

# 重启kubelet
# systemctl restart kubelet.service

  

10、验证

# 可以看到已经恢复
# kubectl get node

  

11、恢复其它master节点

# 注意拷贝kubelet.conf文件到其它服务器(其它服务器自己生成)
# scp admin.conf controller-manager.conf scheduler.conf 10.18.60.4:/etc/kubernetes # scp admin.conf controller-manager.conf scheduler.conf 10.18.60.5:/etc/kubernetes
# scp apiserver-kubelet-client.crt apiserver-kubelet-client.key front-proxy-client.crt front-proxy-client.key 10.18.60.4:/etc/kubernetes/pki
# scp apiserver-kubelet-client.crt apiserver-kubelet-client.key front-proxy-client.crt front-proxy-client.key 10.18.60.5:/etc/kubernetes/pki

 

# 其它两个节点只生成各自的kubelet配置文件
# kubeadm alpha phase kubeconfig kubelet
# grep 'server:' kubelet.conf 
    server: https://k8s.m.api:6443

   

# 直接覆盖(注意文件权限)
# cp -rfp /etc/kubernetes/admin.conf ~/.kube/config

    

# kubelet 客户端签发的不需要备份
# rm -rf /var/lib/kubelet/pki/*

 

# 重启本机所有docker容器
# docker restart $(docker ps -q)

# 重启kubelet
# systemctl restart kubelet.service

  

# 可以看到已经恢复
# kubectl get node

 

转载于:https://www.cnblogs.com/chineseall/p/10920361.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(简称K8s)是一个开源的容器编排平台,它可以自动化地部署、扩展和管理容器化的应用程序。K8s使用了一些先进的技术,如容器、微服务、自动化容器编排、负载均衡、自动化伸缩、存储编排、配置管理等。K8s可以帮助您更快、更可靠地构建、发布和管理容器化应用程序。本教程将介绍Kubernetes的基础知识和操作指南,包括K8s集群的安装、部署、管理、维护和优化等方面。 第1章:Kubernetes概述 1.1 什么是Kubernetes? Kubernetes是一个开源的容器编排平台,它可以自动化地部署、扩展和管理容器化的应用程序。Kubernetes可以帮助您更快、更可靠地构建、发布和管理容器化应用程序。Kubernetes是由Google公司开发的,目前已经成为了云原生应用程序开发的标准。 1.2 Kubernetes的优势 Kubernetes具有以下优势: 1. 自动化容器编排:Kubernetes可以自动化地部署、扩展和管理容器化的应用程序,从而提高了应用程序的可靠性和可用性。 2. 负载均衡:Kubernetes可以实现负载均衡,使得应用程序可以更好地处理高流量的请求。 3. 自动化伸缩:Kubernetes可以自动化地根据应用程序的负载进行伸缩,从而提高了应用程序的性能和可用性。 4. 存储编排:Kubernetes可以对存储进行编排,从而使得应用程序可以更好地利用存储资源。 5. 配置管理:Kubernetes可以对应用程序的配置进行管理,从而实现应用程序的快速部署和更新。 6. 可移植性:Kubernetes可以在不同的云平台和数据中心之间实现应用程序的快速迁移。 1.3 Kubernetes的核心组件 Kubernetes有以下核心组件: 1. kube-apiserver:提供Kubernetes API的服务。 2. etcd:提供Kubernetes的数据存储服务。 3. kube-scheduler:负责调度容器到合适的节点上运行。 4. kube-controller-manager:负责管理Kubernetes集群的控制器。 5. kubelet:负责在节点上运行容器,并和kube-apiserver通信。 6. kube-proxy:负责在集群中实现服务发现和负载均衡。 7. coredns:提供Kubernetes集群中的DNS服务。 第2章:Kubernetes的安装 2.1 Kubernetes的安装环境 在安装Kubernetes之前,您需要准备以下环境: 1. 一台或多台运行Linux操作系统的机器。 2. Docker容器引擎。 3. kubeadm工具。 4. kubelet和kubectl命令行工具。 2.2 Kubernetes的安装步骤 以下是Kubernetes的安装步骤: 步骤1:安装Docker 在安装Kubernetes之前,您需要先安装Docker。 您可以使用以下命令安装Docker: sudo apt-get update sudo apt-get install -y docker.io 步骤2:安装kubeadmkubelet和kubectl 您可以使用以下命令安装kubeadmkubelet和kubectl: sudo apt-get update sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl 步骤3:初始化Kubernetes Master 您可以使用以下命令初始化Kubernetes Master: sudo kubeadm init --pod-network-cidr=10.244.0.0/16 步骤4:配置Kubernetes网络 您可以使用以下命令配置Kubernetes网络: kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml 步骤5:加入Kubernetes节点 您可以使用以下命令将节点加入Kubernetes集群: sudo kubeadm join <MASTER_IP>:<MASTER_PORT> --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH> 第3章:Kubernetes的部署 3.1 Kubernetes的部署方式 Kubernetes可以通过以下几种方式部署: 1. 手动部署:您可以手动编写YAML文件来部署Kubernetes应用程序。 2. Helm部署:Helm是一个开源的Kubernetes包管理器,它可以帮助您更简单、更方便地部署Kubernetes应用程序。 3. Operator部署:Operator是一种Kubernetes扩展机制,它可以帮助您更自动化、更可靠地部署Kubernetes应用程序。 3.2 手动部署Kubernetes应用程序 以下是手动部署Kubernetes应用程序的步骤: 步骤1:创建Deployment 您可以使用以下命令创建Deployment: kubectl create deployment <DEPLOYMENT_NAME> --image=<IMAGE_NAME> 步骤2:创建Service 您可以使用以下命令创建Service: kubectl expose deployment <DEPLOYMENT_NAME> --port=<PORT> --target-port=<TARGET_PORT> --type=<SERVICE_TYPE> 步骤3:创建Ingress 如果您需要在Kubernetes中实现HTTP或HTTPS服务,您可以使用以下命令创建Ingress: kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.39.2/deploy/static/provider/cloud/deploy.yaml 步骤4:验证应用程序 您可以使用以下命令验证应用程序: kubectl get pods kubectl get services kubectl get ingress 3.3 Helm部署Kubernetes应用程序 以下是使用Helm部署Kubernetes应用程序的步骤: 步骤1:安装Helm 您可以使用以下命令安装Helm: curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash 步骤2:添加Helm存储库 您可以使用以下命令添加Helm存储库: helm repo add stable https://charts.helm.sh/stable 步骤3:安装Chart 您可以使用以下命令安装Chart: helm install <RELEASE_NAME> stable/<CHART_NAME> 步骤4:验证应用程序 您可以使用以下命令验证应用程序: kubectl get pods kubectl get services 3.4 Operator部署Kubernetes应用程序 以下是使用Operator部署Kubernetes应用程序的步骤: 步骤1:安装Operator SDK 您可以使用以下命令安装Operator SDK: curl https://sdk.operatorframework.io/sh/latest | sh 步骤2:创建Operator 您可以使用以下命令创建Operator: operator-sdk init --domain=<YOUR_DOMAIN> --repo=<YOUR_REPOSITORY> operator-sdk create api --group=<YOUR_GROUP> --version=<YOUR_VERSION> --kind=<YOUR_KIND> 步骤3:部署Operator 您可以使用以下命令部署Operator: kubectl create -f deploy/operator.yaml 步骤4:验证应用程序 您可以使用以下命令验证应用程序: kubectl get pods kubectl get services 第4章:Kubernetes的管理 4.1 Kubernetes的管理方式 Kubernetes可以通过以下几种方式进行管理: 1. 命令行管理:您可以使用kubectl命令行工具来管理Kubernetes集群。 2. Kubernetes Dashboard:Kubernetes Dashboard是一个Web界面,它可以帮助您更方便地管理Kubernetes集群。 3. Prometheus和Grafana:Prometheus和Grafana是一组开源的监控工具,它们可以帮助您更好地监控Kubernetes集群。 4. Istio:Istio是一个开源的服务网格,它可以帮助您更好地管理Kubernetes应用程序。 4.2 命令行管理Kubernetes集群 以下是使用命令行管理Kubernetes集群的常用命令: 1. 查看节点:kubectl get nodes 2. 查看Pods:kubectl get pods 3. 查看Services:kubectl get services 4. 查看Deployments:kubectl get deployments 5. 查看Ingress:kubectl get ingress 6. 查看ConfigMaps:kubectl get configmaps 7. 查看Secrets:kubectl get secrets 8. 查看Events:kubectl get events 4.3 Kubernetes Dashboard管理Kubernetes集群 以下是使用Kubernetes Dashboard管理Kubernetes集群的步骤: 步骤1:安装Kubernetes Dashboard 您可以使用以下命令安装Kubernetes Dashboard: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 步骤2:创建管理员用户 您可以使用以下命令创建管理员用户: kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin 步骤3:访问Kubernetes Dashboard 您可以使用以下命令访问Kubernetes Dashboard: kubectl proxy 然后,您可以在浏览器中访问以下URL: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 步骤4:登录Kubernetes Dashboard 在访问Kubernetes Dashboard时,您需要使用刚才创建的管理员用户进行登录。 4.4 Prometheus和Grafana监控Kubernetes集群 以下是使用Prometheus和Grafana监控Kubernetes集群的步骤: 步骤1:安装Prometheus Operator 您可以使用以下命令安装Prometheus Operator: kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/v0.39.0/bundle.yaml 步骤2:安装Grafana 您可以使用以下命令安装Grafana: kubectl create -f https://raw.githubusercontent.com/grafana/grafana/master/deploy/kubernetes/grafana.yaml 步骤3:配置Prometheus和Grafana 您可以使用以下命令配置Prometheus和Grafana: kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/setup/prometheus-operator-0servicemonitorCustomResourceDefinition.yaml kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/setup/prometheus-operator-0prometheusrulesCustomResourceDefinition.yaml kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/setup/prometheus-operator-0prometheusrules.yaml kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/setup/prometheus-operator-0prometheusrulefilesCustomResourceDefinition.yaml 步骤4:验证Prometheus和Grafana 您可以使用以下命令验证Prometheus和Grafana: kubectl get pods -n monitoring kubectl get services -n monitoring 步骤5:访问Grafana 在访问Grafana时,您需要使用以下命令获取Grafana的密码: kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 然后,您可以在浏览器中访问以下URL: http://localhost:3000/ 步骤6:配置Grafana面板 您可以在Grafana中配置面板,从而更好地监控Kubernetes集群。 4.5 Istio管理Kubernetes应用程序 以下是使用Istio管理Kubernetes应用程序的步骤: 步骤1:安装Istio 您可以使用以下命令安装Istio: curl -L https://istio.io/downloadIstio | sh - cd istio-1.10.2 export PATH=$PWD/bin:$PATH istioctl install --set profile=demo 步骤2:部署应用程序 您可以使用以下命令部署应用程序: kubectl apply -f <YOUR_APPLICATION_FILE> 步骤3:配置Istio 您可以使用以下命令配置Istio: kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/networking/bookinfo-gateway.yaml 步骤4:验证应用程序 您可以使用以下命令验证应用程序: istioctl analyze kubectl get pods kubectl get services kubectl get ingress 第5章:Kubernetes的维护 5.1 Kubernetes的维护方式 Kubernetes可以通过以下几种方式进行维护: 1. 升级Kubernetes:您可以通过升级Kubernetes来获得更好的性能和更多的功能。 2. 备份和恢复Kubernetes:您可以通过备份和恢复Kubernetes来保证Kubernetes集群的可靠性和可用性。 3. 扩容和缩容Kubernetes:您可以通过扩容和缩容Kubernetes来实现更好的性能和更好的负载均衡。 5.2 升级Kubernetes 以下是升级Kubernetes的步骤: 步骤1:备份Kubernetes 在升级Kubernetes之前,您需要先备份Kubernetes。 步骤2:升级Kubernetes Master 您可以使用以下命令升级Kubernetes Master: sudo apt-get update sudo apt-get install -y kubeadm=<VERSION> kubelet=<VERSION> kubectl=<VERSION> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <VERSION> 步骤3:升级Kubernetes节点 您可以使用以下命令升级Kubernetes节点: sudo apt-get update sudo apt-get install -y kubelet=<VERSION> kubectl=<VERSION> sudo systemctl daemon-reload sudo systemctl restart kubelet 5.3 备份和恢复Kubernetes 以下是备份和恢复Kubernetes的步骤: 步骤1:备份etcd数据 您可以使用以下命令备份etcd数据: sudo ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd/snapshot.db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key 步骤2:恢复etcd数据 您可以使用以下命令恢复etcd数据: sudo systemctl stop kube-apiserver sudo systemctl stop kube-controller-manager sudo systemctl stop kube-scheduler sudo systemctl stop etcd sudo mv /var/lib/etcd /var/lib/etcd.backup sudo ETCDCTL_API=3 etcdctl snapshot restore /var/lib/etcd/snapshot.db \ --data-dir=/var/lib/etcd \ --initial-cluster=<ETCD_INITIAL_CLUSTER> \ --initial-cluster-token=<ETCD_INITIAL_CLUSTER_TOKEN> \ --initial-advertise-peer-urls=https://<ETCD_INITIAL_ADVERTISE_PEER_URLS>:2380 \ --name=<ETCD_NAME> \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt sudo systemctl start etcd sudo systemctl start kube-scheduler sudo systemctl start kube-controller-manager sudo systemctl start kube-apiserver 步骤3:备份Kubernetes配置 您可以使用以下命令备份Kubernetes配置: sudo tar cvzf /path/to/backup/kubernetes-backup.tar.gz /etc/kubernetes 步骤4:恢复Kubernetes配置 您可以使用以下命令恢复Kubernetes配置: sudo systemctl stop kubelet sudo rm -rf /etc/kubernetes/* sudo tar xvzf /path/to/backup/kubernetes-backup.tar.gz -C / sudo systemctl start kubelet 5.4 扩容和缩容Kubernetes 以下是扩容和缩容Kubernetes的步骤: 步骤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值