# RKE2 啟用 Api-Server L4 Load Balancer * domain 解析位置是 LB 的位置,他會分流到 control-plane 節點上 ``` $ host api.example.com api.example.com has address 192.168.11.111 ``` ``` $ kubectl get no -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME rke2 Ready control-plane,etcd,master,worker 79d v1.28.12+rke2r1 192.168.11.113 <none> SUSE Linux Enterprise Server 15 SP5 5.14.21-150500.53-default containerd://1.7.17-k3s1 rke2-m2 Ready control-plane,etcd,master,worker 62d v1.28.12+rke2r1 192.168.11.118 <none> SUSE Linux Enterprise Server 15 SP6 6.4.0-150600.21-default containerd://1.7.17-k3s1 rke2-m3 Ready control-plane,etcd,master,worker 62d v1.28.12+rke2r1 192.168.11.108 <none> SUSE Linux Enterprise Server 15 SP6 6.4.0-150600.21-default containerd://1.7.17-k3s1 rke2-w1 Ready worker 76d v1.28.12+rke2r1 192.168.11.121 <none> SUSE Linux Enterprise Server 15 SP5 5.14.21-150500.53-default containerd://1.7.17-k3s1 ``` * 建立 LB,113 118 108 是三台 master 的 ip。 ``` $ nano nginx.conf events { worker_connections 8192; } stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr"'; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log proxy; upstream api_servers_https { least_conn; server 192.168.11.113:6443 max_fails=5 fail_timeout=8s; server 192.168.11.118:6443 max_fails=5 fail_timeout=8s; server 192.168.11.108:6443 max_fails=5 fail_timeout=8s; } server { listen 6443; proxy_pass api_servers_https; } } $ docker run -d --restart=always -p 6443:6443 -v /root/nginx.conf:/etc/nginx/nginx.conf -v /var/log/nginx:/var/log/nginx nginx:stable ``` * Rancher UI 編輯 RKE2 集群,在 Networking -> TLS Alternate Names 新增 * TLS SAN 代表新增 api-server 可以聽的 hostname,意思就是 kubeconfig 可以自定義 domain 去訪問 api-server。 ![image](https://hackmd.io/_uploads/B1CJ-4Ql1l.png) * 設定好後檢查可以發現已多出 `api.example.com` 這個 domain ``` $ openssl x509 -in /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt -noout -text | grep -A1 Alternative X509v3 Subject Alternative Name: DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:api.example.com, DNS:localhost, DNS:rke2, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1, IP Address:192.168.11.113, IP Address:10.43.0.1 ``` * 檢查 rke2 設定檔 ``` $ cat /etc/rancher/rke2/config.yaml.d/50-rancher.yaml { "agent-token": "m8b4kkj74lb2mm2h8lncptlc6x77n5fvd5x5lbxd4khwnfqhkz94vf", "cni": "calico", "disable-kube-proxy": false, "etcd-expose-metrics": false, "etcd-snapshot-retention": 5, "etcd-snapshot-schedule-cron": "0 */5 * * *", "kube-controller-manager-arg": [ "allocate-node-cidrs=false", "cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager", "secure-port=10257" ], "kube-controller-manager-extra-mount": [ "/var/lib/rancher/rke2/server/tls/kube-controller-manager:/var/lib/rancher/rke2/server/tls/kube-controller-manager" ], "kube-scheduler-arg": [ "cert-dir=/var/lib/rancher/rke2/server/tls/kube-scheduler", "secure-port=10259" ], "kube-scheduler-extra-mount": [ "/var/lib/rancher/rke2/server/tls/kube-scheduler:/var/lib/rancher/rke2/server/tls/kube-scheduler" ], "kubelet-arg": [ "max-pods=200" ], "node-label": [ "cattle.io/os=linux", "rke.cattle.io/machine=419f880f-3b9d-48d3-9d1f-d4085d214ae6" ], "private-registry": "/etc/rancher/rke2/registries.yaml", "protect-kernel-defaults": false, "server": "https://192.168.11.108:9345", "system-default-registry": "registry.rancher.com", "tls-san": [ "api.example.com" ], "token": "mnhttz5x54mpjgm45wcrj4kwqvzjb6r9td4265qw44mwb8nccx7d88" } ``` * kubeconfig 就可以使用這個 domain 訪問 api-server ![image](https://hackmd.io/_uploads/ryJejVXg1x.png) ``` $ kubectl get no NAME STATUS ROLES AGE VERSION rke2 Ready control-plane,etcd,master,worker 79d v1.28.12+rke2r1 rke2-m2 Ready control-plane,etcd,master,worker 62d v1.28.12+rke2r1 rke2-m3 Ready control-plane,etcd,master,worker 62d v1.28.12+rke2r1 rke2-w1 Ready worker 76d v1.28.12+rke2r1 ```