如下以二进制文件方式部署安全的Kubernetes Master高可用集群,具体步骤如下:

1.下载Kubernetes服务的二进制文件

2.部署kube-apiserver服务

3.创建客户端CA证书

4.创建客户端连接kube-apiserver服务所需的kubeconfig配置文件

5.部署kube-controller-manager服务

6.部署kube-scheduler服务

7.使用HAProxy和keepalived部署高可用负载均衡器

下载Kubernetes服务的二进制文件

从Kubernetes的官方GitHub代码库页面下载各组件的二进制文件,在Releases页面找到需要下载的版本号,单击CHANGELOG链接,跳转到已编译好的Server端二进制(Server Binaries)文件的下载页面进行下载。

也可以直接进入到这个页面单击对应版本的CHNAGELOG文件,即可跳转到已编译好的Server端二进制文件下载页面。

可以分别下载Server BinariesNode Binaries二进制文件。

Server Binaries中包含不同系统架构的服务端可执行文件,例如kubernetes-server-linux-amd64.tar.gz文件包含了x86架构下Kubernetes需要运行的全部服务程序文件;Node Binaries则包含了不同系统架构、不同操作系统的Node需要运行的服务程序文件,包括Linux版和Windows版等。

主要的服务程序二进制文件列表如下所示:

文件名 说明
kube-apiserver kube-apiserver主程序
kube-apiserver.docker_tag kube-apiserver docker镜像的tag
kube-apiserver.tar kube-apisener docker镜像文件
kube-controller-manager kube-controller-manager主程序
kube-controller-manager.docker_tag kube-controller-manager docker镜像的tag
kube-controller-manager.tar kube-controller-manager docker镜像文件
kube-scheduler kube-scheduler主程序
kube-scheduler.docker_tag kube-scheduler docker镜像的tag
kube-scheduler.tar kube-scheduler docker镜像文件
kubelet kubelet主程序
kube-proxy kube-proxy主程序
kube-proxy.docker_tag kube-proxy docker镜像的tag
kube-proxy.tar kube-proxy docker镜像文件
kubectl 客户端命令行工具
kubeadm Kubernetes集群安装命令行工具
apiextensions-apiserver 提供实现自定义资源对象的扩展API Server
kube-aggregator 聚合API Server程序

在Kubernetes的Master节点上需要部署的服务包括etcdkube-apiserverkube-controller-managerkube-scheduler

在工作节点(Worker Node)上需要部署的服务包括dockerkubeletkube-proxy。当然,在本实例中由于需要在Master节点上以容器方式部署HAProxy和KeepAlived,所以在Master节点上也需要安装Docker环境。

将Kubernetes的二进制可执行文件(kube-apiserverkube-controller-managerkube-scheduler)复制到/usr/bin目录下,然后在/usr/lib/systemd/system目录下为各服务创建systemd服务配置文件,这样就完成了软件的安装。

部署kube-apiserver服务

先确保已经在所有Master节点上将kube-apiserver复制到/usr/bin目录下。

(1)设置kube-apiserver服务需要的CA相关证书。

准备master_ssl.cnf文件用于生成x509 v3版本的证书,示例如下:

[ req ]
req_extensions = v3_req
distinguished_name = req_distinguished_name [ req_distinguished_name ] [ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names [ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = k8s-1
DNS.6 = k8s-2
DNS.7 = k8s-3
IP.1 = 169.169.0.1
IP.2 = 192.168.3.135
IP.3 = 192.168.3.136
IP.4 = 192.168.3.137
IP.5 = 192.168.3.100

在该文件中主要需要在subjectAltName字段([alt_names])设置Master服务的全部域名和IP地址,包括:

  • DNS主机名,例如k8s-1k8s-2k8s-3等,主机名需要添加到/etct/hosts文件中;
  • Master Service虚拟服务名称,例如kubernetes.default等;
  • IP地址,包括各kube-apiserver所在主机的IP地址和负载均衡器的IP地址,例如192.168.3.135、192.168.3.136、192.168.3.137和192.168.3.100;
  • Master Service虚拟服务的ClusterIP地址,例如169.169.0.1。

然后使用openssl命令创建kube-apiserver的服务端CA证书,包括apiserver.keyapiserver.crt文件,将其复制到/etc/kubernetes/pki目录下:

openssl genrsa -out apiserver.key 2048
openssl req -new -key apiserver.key -config master_ssl.cnf -subj "/CN=192.168.3.135" -out apiserver.csr
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile master_ssl.cnf -out apiserver.crt

apiserver.crtapiserver.key拷贝到所有个Master节点的/etc/kubernetes/pki目录下。

(2)为kube-apiserver服务创建systemd服务配置文件/usr/lib/systemd/system/kube-apiserver.service,内容如下:

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes [Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=always [Install]
WantedBy=multi-user.target

所有Master节点都要做相同的配置。

(3)配置文件/etc/kubernetes/apiserver的内容通过环境变量KUBE_API_ARGS设置kube-apiserver的全部启动参数,包含CA安全配置的启动参数示例如下:

KUBE_API_ARGS="--insecure-port=0 \
--secure-port=6443 \
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt \
--tls-private-key-file=/etc/kubernetes/pki/apiserver.key \
--client-ca-file=/etc/kubernetes/pki/ca.crt \
--apiserver-count=3 --endpoint-reconciler-type=master-count \
--etcd-servers=https://192.168.3.135:2379,https://192.168.3.136:2379,https://192.168.3.137:2379 \
--etcd-cafile=/etc/kubernetes/pki/ca.crt \
--etcd-certfile=/etc/etcd/pki/etcd_client.crt \
--etcd-keyfile=/etc/etcd/pki/etcd_client.key \
--service-cluster-ip-range=169.169.0.0/16 \
--service-node-port-range=30000-32767 \
--allow-privileged=true \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"

主要参数说明如下:

  • --secure-port:HTTPS端口号,默认值为6443。
  • --insecure-port:HTTP端口号,默认值为8080,设置为0表示关闭HTTP访问。
  • --tls-cert-file:服务端CA证书文件全路径,例如/etc/kubernetes/pki/apiserver.crt。
  • --tls-private-key-file:服务端CA私钥文件全路径,例如/etc/kubernetes/pki/apiserver.key。
  • --client-ca-file:CA根证书全路径,例如/etc/kubernetes/pki/ca.crt。
  • --apiserver-count:API Server实例数量,例如3,需要同时设置参数--endpoint-reconciler-type=master-count。
  • --etcd-servers:连接etcd的URL列表,这里使用HTTPS,例如https://192.168.3.135:2379、https://192.168.3.136:2379和https://192.168.3.137:2379
  • --etcd-cafile:etcd使用的CA根证书文件全路径,例如/etc/kubernetes/pki/ca.crt。
  • --etcd-certfile:etcd客户端CA证书文件全路径,例如/etc/etcd/pki/etcd_client.crt。
  • --etcd-keyfile:etcd客户端私钥文件全路径,例如/etc/etcd/pki/etcd_client.key。
  • --service-cluster-ip-range:Service虚拟IP地址范围,以CIDR格式表示,例如169.169.0.0/16,该IP范围不能与物理机的IP地址有重合。
  • --service-node-port-range:Service可使用的物理机端口号范围,默认值为30000~32767。
  • --allow-privileged:是否允许容器以特权模式运行,默认值为true。
  • --logtostderr:是否将日志输出到stderr,默认值为true,当使用systemd系统时,日志将被输出到journald子系统。设置为false表示不输出到stderr,可以输出到日志文件。
  • --log-dir:日志的输出目录,例如/var/log/kubernetes。
  • --v:日志级别。

所有Master节点都要做相同的配置。

(4)在配置文件准备完毕后,在所有Master主机上分别启动kube-apiserver服务,并设置为开机自启动:

# 启动kube-apiserver服务并设置开机启动
systemctl start kube-apiserver && systemctl enable kube-apiserver # 查看kube-apiserver服务状态
systemctl status kube-apiserver

如果服务启动失败,可以查看启动日志:journalctl -xefu kube-apiserver

创建客户端CA证书

kube-controller-managerkube-schedulerkubeletkube-proxy服务作为客户端连接kube-apiserver服务,需要为它们创建客户端CA证书进行访问。

(1)通过openssl工具创建CA证书和私钥文件,命令如下:

openssl genrsa -out client.key 2048
openssl req -new -key client.key -subj "/CN=admin" -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500

其中,-subj参数中“/CN”的名称可以被设置为“admin”,用于标识连接kube-apiserver的客户端用户的名称。

(2)将生成的client.keyclient.crt文件保存在/etc/kubernetes/pki目录下(所有Master节点都需要执行该操作)。

创建客户端连接kube-apiserver服务所需的kubeconfig配置文件

本节为kube-controller-managerkube-schedulerkubeletkube-proxy服务统一创建一个kubeconfig文件作为连接kube-apiserver服务的配置文件,后续也作为kubectl命令行工具连接kube-apiserver服务的配置文件。

kubeconfig文件中主要设置访问kube-apiserver的URL地址及所需CA证书等的相关参数,示例如下:

apiVersion: v1
kind: Config
clusters:
- name: default
cluster:
server: https://192.168.3.100:9443
certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: admin
user:
client-certificate: /etc/kubernetes/pki/client.crt
client-key: /etc/kubernetes/pki/client.key
contexts:
- context:
cluster: default
user: admin
name: default
current-context: default

其中的关键配置参数如下:

  • server:配置为负载均衡器(HAProxy)使用的VIP地址(如192.168.3.100)和HAProxy监听的端口号(如9443)。
  • client-certificate:配置为客户端证书文件(client.crt)全路径。
  • client-key:配置为客户端私钥文件(client.key)全路径。
  • certificate-authority:配置为CA根证书(ca.crt)全路径。
  • users中的name和context中的user是连接API Server的用户名,设置为与客户端证书中的“/CN”名称保持一致,例如“admin”。

kubeconfig文件保存到/etc/kubernetes目录下(所有Master节点都需要执行该操作)。

部署kube-controller-manager服务

前提:在所有Master节点上分别将kube-controller-manager复制到/usr/bin目录下。

(1)为kube-controller-manager服务创建systemd服务配置文件/usr/lib/systemd/system/kube-controller-manager.service,内容如下:

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes [Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=always [Install]
WantedBy=multi-user.target

所有Master节点都需要添加上述配置。

(2)配置文件/etc/kubernetes/controller-manager的内容为通过环境变量KUBE_CONTROLLER_MANAGER_ARGS设置的kube-controller-manager的全部启动参数,包含CA安全配置的启动参数示例如下:

KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--leader-elect=true \
--service-cluster-ip-range=169.169.0.0/16 \
--service-account-private-key-file=/etc/kubernetes/pki/apiserver.key \
--root-ca-file=/etc/kubernetes/pki/ca.crt \
--log-dir=/var/log/kubernetes --logtostderr=false --v=0"

对主要参数说明如下。

  • --kubeconfig:与API Server连接的相关配置。
  • --leader-elect:启用选举机制,在3个节点的环境中应被设置为true。
  • --service-account-private-key-file:为ServiceAccount自动颁发token使用的私钥文件全路径,例如/etc/kubernetes/pki/apiserver.key。
  • --root-ca-file:CA根证书全路径,例如/etc/kubernetes/pki/ca.crt。
  • --service-cluster-ip-range:Service虚拟IP地址范围,以CIDR格式表示,例如169.169.0.0/16,与kube-apiserver服务中的配置保持一致。

所有Master节点都需要添加上述配置。

(3)配置文件准备完毕后,在所有Master主机上分别启动kube-controller-manager服务,并设置为开机自启动:

# 启动kube-controller-manager并设置为开机启动
systemctl start kube-controller-manager && systemctl enable kube-controller-manager
# 查看kube-controller-manager服务状态
systemctl status kube-controller-manager

如果启动失败,查看kube-controller-manager日志:journalctl -xefu kube-controller-manager

部署kube-scheduler服务

前提:在所有Master节点上分别将kube-scheduler复制到/usr/bin目录下。

(1)为kube-scheduler服务创建systemd服务配置文件/usr/lib/systemd/system/kube-scheduler.service,内容如下:

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes [Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=always [Install]
WantedBy=multi-user.target

在所有Master节点添加上述配置。

(2)配置文件/etc/kubernetes/scheduler的内容为通过环境变量KUBE_SCHEDULER_ARGS设置的kube-scheduler的全部启动参数,示例如下:

KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--leader-elect=true \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"

对主要参数说明如下。

  • --kubeconfig:与API Server连接的相关配置。
  • --leader-elect:启用选举机制,在3个节点的环境中应被设置为true。

在所有Master节点添加上述配置。

(3)在配置文件准备完毕后,在所有Master节点上分别启动kube-scheduler服务,并设置为开机自启动:

# 启动kube-scheduler并设置为开机启动
systemctl start kube-scheduler && systemctl enable kube-scheduler
# 查看kube-scheduler服务运行状态
systemctl status kube-scheduler

如果启动失败,查看kube-scheduler日志:journalctl -xefu kube-scheduler

通过systemctl status <service_name>验证服务的启动状态,状态为running并且没有报错日志表示启动成功。

# 查看kube-apiserver服务运行状态
systemctl status kube-apiserver.service
# 查看kube-controller-manager服务运行状态
systemctl status kube-controller-manager.service
# 查看kube-scheduler服务运行状态
systemctl status kube-scheduler.service

至此,一个支持3个节点高可用的K8S Master集群基础服务就搭建完毕了,接下来继续配置负载均衡和高可用。

使用HAProxy和keepalived部署高可用负载均衡器

接下来,在3个kube-apiserver服务的前端部署HAProxy和keepalived,使用VIP 192.168.3.100作为Master的唯一入口地址,供客户端访问。

HAProxyKeepalived均部署为至少有两个实例的高可用架构,以避免单点故障。

下面以在192.168.3.135和192.168.3.136两台服务器上部署为例进行说明。

HAProxy负责将客户端请求转发到后端的3个kube-apiserver实例上,keepalived负责维护VIP 192.168.3.100的高可用。

HAProxy和keepalived的部署架构如图:

接下来对部署HAProxy和keepalived组件进行说明。

1)部署两个HAProxy实例

准备HAProxy的配置文件haproxy.cfg,内容示例如下:

global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4096
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 frontend kube-apiserver
mode tcp
bind *:9443
option tcplog
default_backend kube-apiserver listen stats
mode http
bind *:8888
stats auth admin:password # 这里输入的admin和password是将来访问/stats时需要输入的用户名和密码
stats refresh 5s
stats realm HAProxy\ Statistics
stats uri /stats
log 127.0.0.1 local3 err backend kube-apiserver
mode tcp
balance roundrobin
server k8s-master1 192.168.3.135:6443 check
server k8s-master2 192.168.3.136:6443 check
server k8s-master3 192.168.3.137:6443 check

对主要参数说明如下。

  • frontend:HAProxy的监听协议和端口号,使用TCP,端口号为9443。
  • backend:后端3个kube-apiserver的地址,以IP:Port方式表示,例如192.168.3.135:6443、192.168.3.136:6443和192.168.3.137:6443;mode字段用于设置协议,此处为tcp;balance字段用于设置负载均衡策略,例如roundrobin为轮询模式。
  • listen stats:状态监控的服务配置,其中,bind用于设置监听端口号为8888;stats auth用于配置访问账号;stats uri用于配置访问URL路径,例如/stats。

下面以Docker容器方式运行HAProxy且镜像使用haproxytech/haproxy-debian为例进行说明。

在两台服务器192.168.3.135和192.168.3.136上启动HAProxy,将配置文件haproxy.cfg挂载到容器的/usr/local/etc/haproxy目录下,启动命令如下:

docker run -d --name k8s-haproxy --net=host --restart=always -v ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxytech/haproxy-debian:2.3

在一切正常的情况下,通过浏览器访问http://192.168.3.135:8888/stats地址即可访问HAProxy的管理页面,登录后查看到的主页界面如下图所示。

这里主要关注最后一个表格,其内容为haproxy.cfg配置文件中backend配置的3个kube-apiserver地址,它们的状态均为“UP”,表示与3个kube-apiserver服务成功建立连接,说明HAProxy工作正常。

2)部署两个keepalived实例

Keepalived用于维护VIP地址的高可用,同样在192.168.3.135和192.168.3.136两台服务器上进行部署。

主要需要配置keepalived监控HAProxy的运行状态,当某个HAProxy实例不可用时,自动将VIP地址切换到另一台主机上。

下面对keepalived的配置和启动进行说明。

在第1台服务器192.168.3.135上创建配置文件keepalived.conf,内容如下:

! Configuration File for keepalived

global_defs {
router_id LVS_1
} vrrp_script checkhaproxy
{
script "/usr/bin/check-haproxy.sh"
interval 2
weight -30
} vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1 virtual_ipaddress {
192.168.3.100/24 dev ens32
} authentication {
auth_type PASS
auth_pass password
} track_script {
checkhaproxy
}
}

主要参数在vrrp_instance段中进行设置,说明如下。

  • vrrp_instance VI_1:设置keepalived虚拟路由器VRRP的名称。
  • state:设置为“MASTER”,将其他keepalived均设置为“BACKUP”。
  • interface:待设置VIP地址的网卡名称。
  • virtual_router_id:例如51。
  • priority:优先级,例如100。
  • virtual_ipaddress:VIP地址,例如192.168.18.100/24。
  • authentication:访问keepalived服务的鉴权信息。
  • track_script:HAProxy健康检查脚本。

KeepAlived需要持续监控HAProxy的运行状态,在某个HAProxy实例运行不正常时,自动切换到运行正常的HAProxy实例上。

需要创建一个HAProxy健康检查脚本,定期运行该脚本进行监控,例如新建脚本check-haproxy.sh并将其保存到/usr/bin目录下(其实不用放在/usr/bin目录下也可以,只需要放在将来启动KeepAlived容器的路径上即可),内容示例如下:

#!/bin/bash

count=`netstat -apn | grep 9443 | wc -l`
if [ $count -gt 0 ]; then
exit 0
else
exit 1
fi

若检查成功,则应返回0;若检查失败,则返回非0值。

该脚本需要拷贝到2台安装KeepAlived的Master节点上:192.168.3.135和192.168.3.136 。

KeepAlived根据上面的配置,会每隔2s检查一次HAProxy的运行状态。例如,如果在192.168.3.135上检查失败,KeepAlived就会将VIP地址切换到正常运行HAProxy的192.168.3.136服务器上,保证VIP 192.168.3.100地址的高可用。

在第2台服务器192.168.3.136上创建配置文件keepalived.conf,内容示例如下:

! Configuration File for keepalived

global_defs {
router_id LVS_2
} vrrp_script checkhaproxy
{
script "/usr/bin/check-haproxy.sh"
interval 2
weight -30
} vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 100
advert_int 1 virtual_ipaddress {
192.168.3.100/24 dev ens32
} authentication {
auth_type PASS
auth_pass password
} track_script {
checkhaproxy
}
}

这里与第1个keepalived配置的主要差异如下。

  • vrrp_instance中的state被设置为“BACKUP”,这是因为在整个keepalived集群中只能有一个被设置为“MASTER”。如果keepalived集群不止2个实例,那么除了MASTER,其他都应被设置为“BACKUP”。
  • vrrp_instance的值“VI_1”需要与MASTER的配置相同,表示它们属于同一个虚拟路由器组(VRRP),当MASTER不可用时,同组的其他BACKUP实例会自动选举出一个新的MASTER。
  • HAProxy健康检查脚本check-haproxy.sh与第1个keepalived的相同。

下面以Docker容器方式运行KeepAlived且镜像使用osixia/keepalived为例进行说明。

在两台服务器192.168.3.135和192.168.3.136上启动KeepAlived,将配置文件keepalived.conf挂载到容器的/container/service/keepalived/assets目录下,启动命令如下:

docker run -d --name k8s-keepalived --restart=always --net=host --cap-add=NET_ADMIN --cap-add=NET_BROADCAST --cap-add=NET_RAW -v ${PWD}/keepalived.conf:/container/service/keepalived/assets/keepalived.conf -v ${PWD}/check-haproxy.sh:/usr/bin/check-haproxy.sh osixia/keepalived:2.0.20 --copy-service

在运行正常的情况下,KeepAlived会在服务器192.168.3.135的网卡ens32上设置192.168.3.100的IP地址,同样在服务器192.168.3.135上运行的HAProxy将在该IP地址上监听9443端口号,对需要访问k8s Master的客户端提供负载均衡器的入口地址,即192.168.3.100:9443

通过ip addr命令查看服务器192.168.3.135的IP地址信息,可以看到在ens32网卡上新增了192.168.3.100地址:

[root@m1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ce:e7:52 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.135/24 brd 192.168.3.255 scope global noprefixroute dynamic ens32
valid_lft 1597sec preferred_lft 1597sec
inet 192.168.3.100/24 scope global secondary ens32 # 这里是虚拟IP:192.168.3.100
valid_lft forever preferred_lft forever
inet6 fe80::e88e:f064:183d:7826/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d6:0a:3a:d3 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
[root@m1 ~]#

使用curl命令即可验证通过HAProxy的192.168.3.100:9443地址是否可以访问到kube-apiserver服务:

[root@m1 ~]# curl -v -k https://192.168.3.100:9443
* Rebuilt URL to: https://192.168.3.100:9443/
* Trying 192.168.3.100...
* TCP_NODELAY set
* Connected to 192.168.3.100 (192.168.3.100) port 9443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Request CERT (13):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=192.168.3.129
* start date: Aug 18 10:25:22 2023 GMT
* expire date: Jul 25 10:25:22 2123 GMT
* issuer: CN=192.168.3.129
* SSL certificate verify result: self signed certificate (18), continuing anyway.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* TLSv1.3 (OUT), TLS app data, [no content] (0):
* TLSv1.3 (OUT), TLS app data, [no content] (0):
* TLSv1.3 (OUT), TLS app data, [no content] (0):
* Using Stream ID: 1 (easy handle 0x55fbc97556b0)
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> GET / HTTP/2
> Host: 192.168.3.100:9443
> User-Agent: curl/7.61.1
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS app data, [no content] (0):
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
* TLSv1.3 (OUT), TLS app data, [no content] (0):
* TLSv1.3 (IN), TLS app data, [no content] (0):
* TLSv1.3 (IN), TLS app data, [no content] (0):
* TLSv1.3 (IN), TLS app data, [no content] (0):
< HTTP/2 401
< cache-control: no-cache, private
< content-type: application/json
< content-length: 165
< date: Fri, 18 Aug 2023 10:49:43 GMT
<
* TLSv1.3 (IN), TLS app data, [no content] (0):
{
"kind": "Status",
"apiVersion": "v1",
"metadata": { },
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
* Connection #0 to host 192.168.3.100 left intact
}
[root@m1 ~]#

可以看到TCP/IP连接创建成功,得到响应码为401的应答,说明通过VIP地址192.168.3.100成功访问到了后端的kube-apiserver服务。

至此,Master上所需的3个服务就全部启动完成了,即:一个3节点高可用支持安全访问的K8S Master集群就搭建完毕了。

以二进制文件安装K8S之部署Master高可用集群的更多相关文章

  1. lvs+keepalived部署k8s v1.16.4高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  2. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

  3. 部署MYSQL高可用集群

                                                  mysql-day08     部署MYSQL高可用集群 u 集群架构                   ...

  4. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  5. 部署zookeepe高可用集群

                                                                部署zookeepe高可用集群 部署规划 Nno1         192.16 ...

  6. 一键部署Kubernetes高可用集群

    三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...

  7. Hadoop部署方式-高可用集群部署(High Availability)

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...

  8. 一文吃透如何部署kubernetes高可用集群

    使用 k8s 官方提供的部署工具 kubeadm 自动安装,需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以 pod 的方 ...

  9. kubernetes之手动部署k8s 1.14.1高可用集群

    1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...

  10. k8s集群中部署Rook-Ceph高可用集群

    先决条件 为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作. 为了配置 Ceph 存储集群,至少需要以下本地存储选项之一: 原始设备(无分区或格式化文件系统) ...

随机推荐

  1. [转帖]badboy与jmeter的结合使用

    https://blog.csdn.net/weixin_41754309/article/details/107106855 欢迎关注[无量测试之道]公众号,回复[领取资源], Python编程学习 ...

  2. 【转帖】什么是RLHF

    什么是RLHF? **字面翻译:**RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型. 强化学习从人类反馈 ...

  3. Ubuntu18.04 设置ip地址

    1. 自己用vCenter安装了一个ubuntu18.04, 结果因为是 vCenter6.7 只有web界面, 发现GUI操作时鼠标位置不对,没办法只能通过cli的方式设置ip地址. 2. 先简单查 ...

  4. zabbix基于容器化在UOS1050E上面的安装与使用

    前言 想着能够监控一下操作系统的日志. 因为国产化的需求, 所以我这边使用了UOS1050E 安装zabbix时多次提示缺少php-json 或者是缺少一些libevent等组件. 自己尝试进行解决发 ...

  5. 《Javascript高级程序设计》读书笔记——构造函数与原型

    构造函数与原型 构造函数模式 最简单的构造函数: function Person(name, age, job) { this.name = name; this.age = age; this.jo ...

  6. 玩一玩 VictoriaLogs

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 下载 see: https://github.com/Vi ...

  7. 【记录一个问题】gin框架中,ShouldBindUri()函数依赖特定版本编译器,更换库的版本号后导致panic

    panic发生在这一行: uriBindErr = c.ShouldBindUri(methodLastInParam.Interface()) 导致panic的堆栈信息如下: err=reflect ...

  8. Leetcode 42题 接雨水(Trapping Rain Water) Java语言求解

    题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目内容 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱 ...

  9. TienChin 活动管理-添加活动接口

    ActivityController @PreAuthorize("hasPermission('tienchin:activity:create')") @Log(title = ...

  10. 14.3 Socket 字符串分块传输

    首先为什么要实行分块传输字符串,一般而言Socket套接字最长发送的字节数为8192字节,如果发送的字节超出了此范围则后续部分会被自动截断,此时将字符串进行分块传输将显得格外重要,分块传输的关键在于封 ...