{"id":35644,"date":"2023-04-15T10:54:28","date_gmt":"2024-01-04T12:20:54","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/"},"modified":"2024-04-29T23:38:14","modified_gmt":"2024-04-29T15:38:14","slug":"%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/","title":{"rendered":"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9"},"content":{"rendered":"<p>\u4f60\u597d\u3002<br \/>\n\u6211\u662fClass Act Infrastructure\u4e8b\u4e1a\u90e8\u7684\u5927\u585a\u5148\u751f\u3002<\/p>\n<p>\u6211\u6253\u7b97\u5199\u4e0b\u5728\u521b\u5efa\u4e86kubeadm\u57fa\u7840\u7684K8s\u73af\u5883\u7684\u57fa\u7840\u4e0a\uff0c\u90e8\u7f72kubernetes-dashboard\u3001MetalLB\u548cLoadBalancer\u73af\u5883\uff0c\u4ee5\u53ca\u6dfb\u52a0worker\u8282\u70b9\u7684\u6b65\u9aa4\u3002<\/p>\n<p>&nbsp;<\/p>\n<h1>\u5c06kubernetes-dashboard\u90e8\u7f72<\/h1>\n<p>\u6839\u636e\u4ee5\u4e0b\u53c2\u8003\uff0c\u6211\u4eec\u5c06\u90e8\u7f72kubernetes-dashboard\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~# kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/dashboard\/v2.7.0\/aio\/deploy\/recommended.yaml\r\n<\/code><\/pre>\n<p>\u5c3d\u7ba1 Kubernetes \u7684\u5b98\u65b9\u7f51\u7ad9\u4e0a\u4e5f\u6709\u57fa\u4e8e YAML \u7684\u90e8\u7f72\u6b65\u9aa4\uff0c\u4f46\u5728\u6211\u7684\u73af\u5883\u4e2d\u65e0\u6cd5\u6210\u529f\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u975e\u5e38\u62b1\u6b49\u628a\u65e5\u5fd7\u6574\u7406\u5f97\u5f88\u6742\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u90e8\u7f72\u540e\u5c06\u4f1a\u51fa\u73b0\u4ee5\u4e0b\u8fd9\u79cd\u72b6\u6001\u3002<br \/>\n\u770b\u8d77\u6765\u4f1a\u521b\u5efa\u4e00\u4e2a\u540d\u4e3akubernetes-dashboard\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u7136\u540e\u5728\u5176\u4e2d\u8fd0\u884c\u5404\u79cd\u73af\u5883\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code>Every 2.0s: kubectl get pod,svc,cm,secret -A -o wide                                                                                                                                                     k8s-master: Mon May 22 08:26:23 2023\r\nNAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES\r\nkube-system            pod\/calico-kube-controllers-6c99c8747f-z4gn9     1\/1     Running   0          6m26s   172.16.235.194   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/calico-node-4mp6j                            1\/1     Running   0          6m26s   192.168.2.31     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/calico-node-sprl5                            1\/1     Running   0          6m26s   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/coredns-5d78c9869d-mt78k                     1\/1     Running   0          7m57s   172.16.235.193   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/coredns-5d78c9869d-pqbz5                     1\/1     Running   0          7m57s   172.16.235.195   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/etcd-k8s-master                              1\/1     Running   0          8m8s    192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-apiserver-k8s-master                    1\/1     Running   0          8m      192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-controller-manager-k8s-master           1\/1     Running   0          8m4s    192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-proxy-s8frp                             1\/1     Running   0          7m57s   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-proxy-v5l4p                             1\/1     Running   0          6m45s   192.168.2.31     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-scheduler-k8s-master                    1\/1     Running   0          8m      192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkubernetes-dashboard   pod\/dashboard-metrics-scraper-5cb4f4bb9c-ps8vt   1\/1     Running   0          3m29s   172.16.79.65     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkubernetes-dashboard   pod\/kubernetes-dashboard-6967859bff-p7w2c        1\/1     Running   0          3m29s   172.16.79.66     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\n\r\nNAMESPACE              NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE     SELECTOR\r\ndefault                service\/kubernetes                  ClusterIP   10.96.0.1        &lt;none&gt;        443\/TCP                  8m4s    &lt;none&gt;\r\nkube-system            service\/kube-dns                    ClusterIP   10.96.0.10       &lt;none&gt;        53\/UDP,53\/TCP,9153\/TCP   8m1s    k8s-app=kube-dns\r\nkubernetes-dashboard   service\/dashboard-metrics-scraper   ClusterIP   10.101.192.126   &lt;none&gt;        8000\/TCP                 3m29s   k8s-app=dashboard-metrics-scraper\r\nkubernetes-dashboard   service\/kubernetes-dashboard        ClusterIP   10.98.208.9      &lt;none&gt;        443\/TCP                  3m30s   k8s-app=kubernetes-dashboard\r\n\r\nNAMESPACE              NAME                                                             DATA   AGE\r\ndefault                configmap\/kube-root-ca.crt                                       1      7m58s\r\nkube-node-lease        configmap\/kube-root-ca.crt                                       1      7m58s\r\nkube-public            configmap\/cluster-info                                           2      8m2s\r\nkube-public            configmap\/kube-root-ca.crt                                       1      7m58s\r\nkube-system            configmap\/calico-config                                          4      6m28s\r\nkube-system            configmap\/coredns                                                1      8m1s\r\nkube-system            configmap\/extension-apiserver-authentication                     6      8m10s\r\nkube-system            configmap\/kube-apiserver-legacy-service-account-token-tracking   1      8m10s\r\nkube-system            configmap\/kube-proxy                                             2      8m1s\r\nkube-system            configmap\/kube-root-ca.crt                                       1      7m58s\r\nkube-system            configmap\/kubeadm-config                                         1      8m4s\r\nkube-system            configmap\/kubelet-config                                         1      8m3s\r\nkubernetes-dashboard   configmap\/kube-root-ca.crt                                       1      3m30s\r\nkubernetes-dashboard   configmap\/kubernetes-dashboard-settings                          0      3m29s\r\n\r\nNAMESPACE              NAME                                     TYPE                            DATA   AGE\r\nkube-system            secret\/bootstrap-token-x847d2            bootstrap.kubernetes.io\/token   7      8m2s\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-certs        Opaque                          0      3m29s\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-csrf         Opaque                          1      3m29s\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-key-holder   Opaque                          2      3m29s\r\n<\/code><\/pre>\n<p>\u6839\u636e\u4ee5\u4e0b\u53c2\u8003\uff0c\u751f\u6210\u7528\u4e8e\u4eea\u8868\u677f\u767b\u5f55\u6240\u9700\u7684\u4ee4\u724c\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u6b64\u6b21\u51c6\u5907\u7684yaml\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\u6240\u793a\uff0c\u4e3b\u8981\u5305\u542b\u4e24\u70b9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ServiceAccount<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">admin-user<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kubernetes-dashboard<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rbac.authorization.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterRoleBinding<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">admin-user<\/span>\r\n<span class=\"na\">roleRef<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">apiGroup<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rbac.authorization.k8s.io<\/span>\r\n  <span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterRole<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">cluster-admin<\/span>\r\n<span class=\"na\">subjects<\/span><span class=\"pi\">:<\/span>\r\n<span class=\"pi\">-<\/span> <span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ServiceAccount<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">admin-user<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kubernetes-dashboard<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5c07\u9032\u884c\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl apply -f admin-user.yaml\r\nserviceaccount\/admin-user created\r\nroot@k8s-master:~\/yaml# kubectl apply -f ClusterRoleBinding.yaml\r\nclusterrolebinding.rbac.authorization.k8s.io\/admin-user created\r\n<\/code><\/pre>\n<p>\u90e8\u7f72\u5b8c\u6210\u540e\u4f1a\u6267\u884c\u521b\u5efa\u4ee4\u724c\u64cd\u4f5c\uff0c\u8bf7\u8bb0\u4e0b\u8f93\u51fa\u7684\u5b57\u7b26\u4e32\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl -n kubernetes-dashboard create token admin-user\r\neyJhbGciOiJSUzI1NiIsImtpZCI6IlljUlRNVEZQcGptbmYyRzQ4R0RybjBVeks4aFAtQ1YwcGVMenZpWE90ejQifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjg0NzQ3NTYzLCJpYXQiOjE2ODQ3NDM5NjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiODhjYTJkNmYtNjA4OS00M2Y1LWEyZWMtMjNmYjg2YjY0NGY3In19LCJuYmYiOjE2ODQ3NDM5NjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.OC1CsdQhYmZAVnDX-E0Je2hhWGI11avIh1KE3odsx32moGRq8gHtXknzju3tKlyRppvfZ4KGVhH4qh2k4ea2tDM-bjLnbZiqmQyeA26izA_PAARbGO_Oh7ccx5yjFHOeAbY0mNOKp7fPJjwO6zoEPQRT6gK3prEBHh14uv3GeZ7KHJkdHxohLl5mHMZy3CSpLL4KSvg2R0l4Msg-kvKVKSNIpauhPz1-YZVRnUvYa3t_FwWVgNX6SrQDK--XlSbNVjLCi39qLZIYzIeGXyIVhBGcvDtU4y9NbXdakQRgMwtc_byS1AEVz8OC1IL1ysNvitdidzcn6efhpXGRuPt_Xw\r\n<\/code><\/pre>\n<p>\u6211\u60f3\u4f7f\u7528NodePort\u901a\u8fc7Web\u6d4f\u89c8\u5668\u8bbf\u95eedashboard\u3002<br \/>\n\u7531\u4e8e\u51c6\u5907yaml\u6587\u4ef6\u5f88\u9ebb\u70e6\uff0c\u6240\u4ee5\u8fd9\u6b21\u4f7f\u7528expose\u547d\u4ee4\u3002<br \/>\n&#8211;target-port\u6307\u5b9a\u4e3a8443\u7aef\u53e3\u3002\u770b\u8d77\u6765dashboard\u6b63\u5728\u76d1\u542c\u8fd9\u4e2a\u7aef\u53e3\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl expose pod kubernetes-dashboard-6967859bff-p7w2c --type=NodePort --name=dashboard-nodeport --namespace=kubernetes-dashboard --target-port=8443\r\nservice\/dashboard-nodeport exposed\r\n\r\nroot@k8s-master:~\/yaml# kubectl get svc -o wide -n kubernetes-dashboard\r\nNAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE     SELECTOR\r\ndashboard-metrics-scraper   ClusterIP   10.101.192.126   &lt;none&gt;        8000\/TCP         6m30s   k8s-app=dashboard-metrics-scraper\r\ndashboard-nodeport          NodePort    10.102.38.116    &lt;none&gt;        8443:30573\/TCP   23s     k8s-app=kubernetes-dashboard,pod-template-hash=6967859bff\r\nkubernetes-dashboard        ClusterIP   10.98.208.9      &lt;none&gt;        443\/TCP          6m31s   k8s-app=kubernetes-dashboard\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/22-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2F71fb9a9a-bf3b-44c3-afe3-366313bef8d9\" alt=\"image\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/23-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2F2b69f09e-28f1-4b20-bc05-15e30244d388\" alt=\"image (1)\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/24-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2Fb5246577-a3ef-4a7b-9302-c5d1c7b4a0cd\" alt=\"image (2)\" \/><\/div>\n<h1>MetalLB\u548cLoadBalancer\u7684\u90e8\u7f72<\/h1>\n<p>\u6211\u60f3\u7ed9\u4e0a\u8ff0\u521b\u5efa\u7684\u4eea\u8868\u677f\u5206\u914d\u4e00\u4e2a\u8d1f\u8f7d\u5747\u8861\u5668\u3002\u4e2a\u4eba\u800c\u8a00\uff0c\u6211\u4e0d\u592a\u559c\u6b22\u4f7f\u7528nodeport\u8fdb\u884c\u8bbf\u95ee&#8230;<br \/>\n\u4e3a\u4e86\u90e8\u7f72\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u6211\u5c06\u9996\u5148\u90e8\u7f72MetalLB\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u6839\u636e\u4e0a\u8ff0\u7f51\u7ad9\u63d0\u4f9b\u7684\u6307\u5357\uff0c\u6267\u884c\u547d\u4ee4\u8fdb\u884c\u90e8\u7f72\u3002<br \/>\n\u6267\u884c\u8be5\u547d\u4ee4\u540e\uff0c\u5c06\u521b\u5efa\u4e00\u4e2a\u540d\u4e3ametallb-system\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u5e76\u5728\u5176\u4e2d\u90e8\u7f72\u5404\u79cd\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl apply -f https:\/\/raw.githubusercontent.com\/metallb\/metallb\/v0.13.9\/config\/manifests\/metallb-native.yaml\r\n\r\nroot@k8s-master:~\/yaml# kubectl get pod,svc,cm,secret -o wide -A\r\nNAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE   IP               NODE           NOMINATED NODE   READINESS GATES\r\ndefault                pod\/nginx-deploy-dd79d5576-hgv9b                 1\/1     Running   0          37h   172.16.79.70     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\ndefault                pod\/nginx-deploy-dd79d5576-wsccn                 1\/1     Running   0          37h   172.16.79.69     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/calico-kube-controllers-6c99c8747f-z4gn9     1\/1     Running   0          37h   172.16.235.194   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/calico-node-4mp6j                            1\/1     Running   0          37h   192.168.2.31     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/calico-node-sprl5                            1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/coredns-5d78c9869d-mt78k                     1\/1     Running   0          37h   172.16.235.193   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/coredns-5d78c9869d-pqbz5                     1\/1     Running   0          37h   172.16.235.195   k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/etcd-k8s-master                              1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-apiserver-k8s-master                    1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-controller-manager-k8s-master           1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-proxy-s8frp                             1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-proxy-v5l4p                             1\/1     Running   0          37h   192.168.2.31     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkube-system            pod\/kube-scheduler-k8s-master                    1\/1     Running   0          37h   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nkubernetes-dashboard   pod\/dashboard-metrics-scraper-5cb4f4bb9c-ps8vt   1\/1     Running   0          37h   172.16.79.65     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nkubernetes-dashboard   pod\/kubernetes-dashboard-6967859bff-p7w2c        1\/1     Running   0          37h   172.16.79.66     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nmetallb-system         pod\/controller-7948676b95-zv58m                  1\/1     Running   0          87s   172.16.79.71     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\nmetallb-system         pod\/speaker-cz9fz                                1\/1     Running   0          87s   192.168.2.30     k8s-master     &lt;none&gt;           &lt;none&gt;\r\nmetallb-system         pod\/speaker-ppspq                                1\/1     Running   0          87s   192.168.2.31     k8s-worker01   &lt;none&gt;           &lt;none&gt;\r\n\r\nNAMESPACE              NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE   SELECTOR\r\ndefault                service\/kubernetes                  ClusterIP   10.96.0.1        &lt;none&gt;        443\/TCP                  37h   &lt;none&gt;\r\nkube-system            service\/kube-dns                    ClusterIP   10.96.0.10       &lt;none&gt;        53\/UDP,53\/TCP,9153\/TCP   37h   k8s-app=kube-dns\r\nkubernetes-dashboard   service\/dashboard-metrics-scraper   ClusterIP   10.101.192.126   &lt;none&gt;        8000\/TCP                 37h   k8s-app=dashboard-metrics-scraper\r\nkubernetes-dashboard   service\/dashboard-nodeport          NodePort    10.102.38.116    &lt;none&gt;        8443:30573\/TCP           37h   k8s-app=kubernetes-dashboard,pod-template-hash=6967859bff\r\nkubernetes-dashboard   service\/kubernetes-dashboard        ClusterIP   10.98.208.9      &lt;none&gt;        443\/TCP                  37h   k8s-app=kubernetes-dashboard\r\nmetallb-system         service\/webhook-service             ClusterIP   10.107.255.246   &lt;none&gt;        443\/TCP                  87s   component=controller\r\n\r\nNAMESPACE              NAME                                                             DATA   AGE\r\ndefault                configmap\/kube-root-ca.crt                                       1      37h\r\nkube-node-lease        configmap\/kube-root-ca.crt                                       1      37h\r\nkube-public            configmap\/cluster-info                                           2      37h\r\nkube-public            configmap\/kube-root-ca.crt                                       1      37h\r\nkube-system            configmap\/calico-config                                          4      37h\r\nkube-system            configmap\/coredns                                                1      37h\r\nkube-system            configmap\/extension-apiserver-authentication                     6      37h\r\nkube-system            configmap\/kube-apiserver-legacy-service-account-token-tracking   1      37h\r\nkube-system            configmap\/kube-proxy                                             2      37h\r\nkube-system            configmap\/kube-root-ca.crt                                       1      37h\r\nkube-system            configmap\/kubeadm-config                                         1      37h\r\nkube-system            configmap\/kubelet-config                                         1      37h\r\nkubernetes-dashboard   configmap\/kube-root-ca.crt                                       1      37h\r\nkubernetes-dashboard   configmap\/kubernetes-dashboard-settings                          0      37h\r\nmetallb-system         configmap\/kube-root-ca.crt                                       1      88s\r\n\r\nNAMESPACE              NAME                                     TYPE                            DATA   AGE\r\nkube-system            secret\/bootstrap-token-x847d2            bootstrap.kubernetes.io\/token   7      37h\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-certs        Opaque                          0      37h\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-csrf         Opaque                          1      37h\r\nkubernetes-dashboard   secret\/kubernetes-dashboard-key-holder   Opaque                          2      37h\r\nmetallb-system         secret\/memberlist                        Opaque                          1      63s\r\nmetallb-system         secret\/webhook-server-cert               Opaque                          4      87s\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u8fdb\u884cMetalLB\u5206\u914d\u7ed9\u8d1f\u8f7d\u5747\u8861\u5668\u7684IP\u5730\u5740\u6c60\u8bbe\u7f6e\u7b49\u914d\u7f6e\u3002\u8bf7\u53c2\u8003\u4ee5\u4e0b\u7f51\u7ad9\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd9\u6b21\u51c6\u5907\u7684yaml\u6709\u4ee5\u4e0b\u4e24\u70b9\u3002<br \/>\n&#8220;addresses&#8221;\u90e8\u5206\u662f\u6307\u5b9a\u60f3\u8981\u5206\u914d\u7684IP\u5730\u5740\u8303\u56f4\u3002<br \/>\n\u6211\u6307\u5b9a\u4e86192.168.2.35\uff5e39\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metallb.io\/v1beta1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">IPAddressPool<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">first-pool<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metallb-system<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">addresses<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">192.168.2.35-192.168.2.39<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metallb.io\/v1beta1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">L2Advertisement<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">example<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metallb-system<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">ipAddressPools<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">first-pool<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5c07\u9032\u884c\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl apply -f IPAddressPoolMetalLB.yaml\r\nipaddresspool.metallb.io\/first-pool created\r\nroot@k8s-master:~\/yaml# kubectl apply -f L2Advertisement.yaml\r\nl2advertisement.metallb.io\/example created\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5c07\u90e8\u7f72Load Balancer\u3002\u8acb\u4f7f\u7528\u4ee5\u4e0b\u7684yaml\u6a94\u6848\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dashboard-loadbalancer<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kubernetes-dashboard<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">LoadBalancer<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kubernetes-dashboard<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">60000<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8443<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5c06\u90e8\u7f72\u3002<br \/>\n\u6211\u5c06\u786e\u8ba4\u6307\u5b9a\u7684EXTERNAL-IP\u662f\u5426\u5df2\u7ecf\u5206\u914d\u7ed9\u4e86IP\uff0c\u5e76\u4e14\u901a\u8fc7\u63cf\u8ff0\u67e5\u770b\u786e\u5b9a\u7aef\u70b9\u662f\u5426\u4e3a\u4eea\u8868\u76d8\u7684IP\u5730\u5740\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~\/yaml# kubectl apply -f dashboard-loadbalancer.yaml\r\nservice\/dashboard-loadbalancer created\r\n\r\nroot@k8s-master:~\/yaml# kubectl get svc -o wide -n kubernetes-dashboard\r\nNAME                        TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)           AGE   SELECTOR\r\ndashboard-loadbalancer      LoadBalancer   10.102.236.52    192.168.2.35   60000:32251\/TCP   40s   k8s-app=kubernetes-dashboard\r\ndashboard-metrics-scraper   ClusterIP      10.101.192.126   &lt;none&gt;         8000\/TCP          37h   k8s-app=dashboard-metrics-scraper\r\ndashboard-nodeport          NodePort       10.102.38.116    &lt;none&gt;         8443:30573\/TCP    37h   k8s-app=kubernetes-dashboard,pod-template-hash=6967859bff\r\nkubernetes-dashboard        ClusterIP      10.98.208.9      &lt;none&gt;         443\/TCP           37h   k8s-app=kubernetes-dashboard\r\n\r\nroot@k8s-master:~\/yaml# kubectl describe svc dashboard-loadbalancer -n kubernetes-dashboard\r\nName:                     dashboard-loadbalancer\r\nNamespace:                kubernetes-dashboard\r\nLabels:                   &lt;none&gt;\r\nAnnotations:              metallb.universe.tf\/ip-allocated-from-pool: first-pool\r\nSelector:                 k8s-app=kubernetes-dashboard\r\nType:                     LoadBalancer\r\nIP Family Policy:         SingleStack\r\nIP Families:              IPv4\r\nIP:                       10.102.236.52\r\nIPs:                      10.102.236.52\r\nLoadBalancer Ingress:     192.168.2.35\r\nPort:                     &lt;unset&gt;  60000\/TCP\r\nTargetPort:               8443\/TCP\r\nNodePort:                 &lt;unset&gt;  32251\/TCP\r\nEndpoints:                172.16.79.66:8443\r\nSession Affinity:         None\r\nExternal Traffic Policy:  Cluster\r\nEvents:\r\n  Type    Reason       Age   From                Message\r\n  ----    ------       ----  ----                -------\r\n  Normal  IPAllocated  69s   metallb-controller  Assigned IP [\"192.168.2.35\"]\r\n<\/code><\/pre>\n<p>\u6211\u5c06\u786e\u8ba4\u80fd\u5426\u901a\u8fc7EXTERNAL-IP\u8bbf\u95ee\u4eea\u8868\u677f\u3002<br \/>\n\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06\u662fhttps:\/\/192.168.2.35:60000\u3002<br \/>\n\u6211\u8ba4\u4e3a\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u8fdb\u884c\u8bbf\u95ee\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/42-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2Fb3cd0890-626e-401c-b9c6-b8fc25ffaa2f\" alt=\"image (2)\" \/><\/div>\n<h1>\u589e\u52a0\u4e00\u4e2a\u5de5\u4f5c\u8282\u70b9\u3002<\/h1>\n<p>\u5728\u4e3b\u8282\u70b9\u4e0a\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4:<br \/>\n\u5728token create\u547d\u4ee4\u4e2d\u6dfb\u52a0&#8211;print-join-command\u9009\u9879\u3002\u8bb0\u4e0b\u8f93\u51fa\u7684\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~# kubeadm token create --print-join-command\r\nkubeadm join k8s-master:6443 --token skdrkk.wribyfy6emzacxhx --discovery-token-ca-cert-hash sha256:0d6486415dd39743f08afdf758be752f84476eb7bf9cba8935d6c7790f61ec00\r\n\r\nroot@k8s-master:~# kubeadm token list\r\nTOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS\r\nskdrkk.wribyfy6emzacxhx   23h         2023-05-24T10:04:23Z   authentication,signing   &lt;none&gt;                                                     system:bootstrappers:kubeadm:default-node-token\r\n<\/code><\/pre>\n<p>\u60a8\u53ef\u4ee5\u5728\u60f3\u8981\u6dfb\u52a0\u547d\u4ee4\u7684\u5de5\u4f5c\u8282\u70b9\u4e0a\u6267\u884c\u4e0a\u8ff0\u8f93\u51fa\u7684\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-worker02:~# kubeadm join k8s-master:6443 --token skdrkk.wribyfy6emzacxhx --discovery-token-ca-cert-hash sha256:0d6486415dd39743f08afdf758be752f84476eb7bf9cba8935d6c7790f61ec00\r\n[preflight] Running pre-flight checks\r\n[preflight] Reading configuration from the cluster...\r\n[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'\r\n[kubelet-start] Writing kubelet configuration to file \"\/var\/lib\/kubelet\/config.yaml\"\r\n[kubelet-start] Writing kubelet environment file with flags to file \"\/var\/lib\/kubelet\/kubeadm-flags.env\"\r\n[kubelet-start] Starting the kubelet\r\n[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...\r\nThis node has joined the cluster:\r\n* Certificate signing request was sent to apiserver and a response was received.\r\n* The Kubelet was informed of the new secure connection details.\r\nRun 'kubectl get nodes' on the control-plane to see this node join the cluster.\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u68c0\u67e5\u4e3b\u8282\u70b9\u662f\u5426\u80fd\u591f\u8bc6\u522b\u3002<br \/>\n\u6211\u8ba4\u4e3a\u7b49\u5f85\u51e0\u5206\u949f\u4f1a\u8fdb\u5165Ready\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code>root@k8s-master:~# kubectl get node\r\nNAME           STATUS   ROLES           AGE   VERSION\r\nk8s-master     Ready    control-plane   25h   v1.27.2\r\nk8s-worker01   Ready    &lt;none&gt;          25h   v1.27.2\r\nk8s-worker02   Ready    &lt;none&gt;          60s   v1.27.2\r\n<\/code><\/pre>\n<h1>\u5176\u4ed6<\/h1>\n<p>\u5efa\u7acbKubeadm\u73af\u5883\u65f6\uff0c\u5982\u679c\u547d\u4ee4\u5f88\u591a\u800c\u4e14\u9ebb\u70e6\uff0c\u8bf7\u5c06\u4ee5\u4e0b\u5185\u5bb9\u7c98\u8d34\u5230\u5982Teraterm\u7b49\u7ec8\u7aef\u4e2d\uff0c\u5e76\u6309\u4e0b\u56de\u8f66\u952e\uff0c\u5b83\u4f1a\u81ea\u52a8\u5904\u7406\u3002\u53ef\u80fd\u4f1a\u6709\u4e00\u4e9b\u573a\u666f\u9700\u8981\u6309\u4e0b\u56de\u8f66\u952e\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u6837\u4f1a\u65b9\u4fbf\u5f88\u591a\u3002<\/p>\n<pre class=\"post-pre\"><code>swapoff -a\r\nsed -i '\/ swap \/ s\/^\\(.*\\)$\/#\\1\/g' \/etc\/fstab\r\ntee \/etc\/modules-load.d\/containerd.conf &lt;&lt;EOF\r\noverlay\r\nbr_netfilter\r\nEOF\r\nmodprobe overlay\r\nmodprobe br_netfilter\r\ntee \/etc\/sysctl.d\/kubernetes.conf &lt;&lt;EOF\r\nnet.bridge.bridge-nf-call-ip6tables = 1\r\nnet.bridge.bridge-nf-call-iptables = 1\r\nnet.ipv4.ip_forward = 1\r\nEOF\r\nsysctl --system\r\napt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates\r\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmour -o \/etc\/apt\/trusted.gpg.d\/docker.gpg\r\nadd-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\"\r\napt update\r\napt install -y containerd.io\r\ncontainerd config default | sudo tee \/etc\/containerd\/config.toml &gt;\/dev\/null 2&gt;&amp;1\r\nsed -i 's\/SystemdCgroup \\= false\/SystemdCgroup \\= true\/g' \/etc\/containerd\/config.toml\r\nsystemctl restart containerd\r\nsystemctl enable containerd\r\ncurl -s https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg | sudo gpg --dearmour -o \/etc\/apt\/trusted.gpg.d\/kubernetes-xenial.gpg\r\napt-add-repository \"deb http:\/\/apt.kubernetes.io\/ kubernetes-xenial main\"\r\napt update\r\napt install -y kubelet kubeadm kubectl\r\napt-mark hold kubelet kubeadm kubectl\r\n<\/code><\/pre>\n<p>\u5728\u4f7f\u7528master\u8282\u70b9\u8fd0\u884ckubeadm init\u547d\u4ee4\u540e\uff0c\u8fd8\u63d0\u4f9b\u4e86\u6267\u884c\u7684\u547d\u4ee4\u9009\u9879\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir -p $HOME\/.kube \r\ncp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config \r\nchown $(id -u):$(id -g) $HOME\/.kube\/config\r\nkubectl cluster-info\r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u5728\u8fdb\u884c\u73af\u5883\u914d\u7f6e\u65f6\uff0c\u5982\u679c\u7ecf\u5e38\u9047\u5230\u9519\u8bef\uff0c\u53ef\u80fd\u4f1a\u8003\u8651\u4f7f\u7528\u5feb\u7167\u8fdb\u884c\u56de\u6eda\u3002\u4f46\u662f\uff0c\u5982\u679c\u9891\u7e41\u64cd\u4f5c\u5feb\u7167\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u670d\u52a1\u5668\u65f6\u95f4\u9519\u4e71\uff0c\u8fdb\u800c\u5728\u5b89\u88c5\u65f6\u51fa\u73b0\u9519\u8bef\u3002\u6b64\u65f6\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u4fee\u6b63\u65f6\u95f4\uff0c\u5e76\u5c1d\u8bd5\u91cd\u65b0\u5b89\u88c5\u4e00\u6b21\u3002<\/p>\n<pre class=\"post-pre\"><code>systemctl restart systemd-timesyncd\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4f60\u597d\u3002 \u6211\u662fClass Act Infrastructure\u4e8b\u4e1a\u90e8\u7684\u5927\u585a\u5148\u751f\u3002 \u6211\u6253\u7b97\u5199\u4e0b\u5728\u521b\u5efa\u4e86kubead [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35644","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001metallb\u548c\u8d1f\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9\" \/>\n<meta property=\"og:description\" content=\"\u4f60\u597d\u3002 \u6211\u662fClass Act Infrastructure\u4e8b\u4e1a\u90e8\u7684\u5927\u585a\u5148\u751f\u3002 \u6211\u6253\u7b97\u5199\u4e0b\u5728\u521b\u5efa\u4e86kubead [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001metallb\u548c\u8d1f\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-04T12:20:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T15:38:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/22-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2F71fb9a9a-bf3b-44c3-afe3-366313bef8d9\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/\",\"name\":\"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-04T12:20:54+00:00\",\"dateModified\":\"2024-04-29T15:38:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001metallb\u548c\u8d1f\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9","og_description":"\u4f60\u597d\u3002 \u6211\u662fClass Act Infrastructure\u4e8b\u4e1a\u90e8\u7684\u5927\u585a\u5148\u751f\u3002 \u6211\u6253\u7b97\u5199\u4e0b\u5728\u521b\u5efa\u4e86kubead [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001metallb\u548c\u8d1f\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-04T12:20:54+00:00","article_modified_time":"2024-04-29T15:38:14+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d23ee37434c4406c2c930\/22-0.com%2Fohtsuka-shota%2Fascii0-python-encrypt-decrypt%2Fassets%2F127835743%2F71fb9a9a-bf3b-44c3-afe3-366313bef8d9"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/","name":"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-04T12:20:54+00:00","dateModified":"2024-04-29T15:38:14+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728\u4f7f\u7528kubeadm\u642d\u5efa\u7684k8s\u73af\u5883\u4e2d\uff0c\u53ef\u4ee5\u5b89\u88c5\u4eea\u8868\u76d8\u3001MetalLB\u548c\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%bd%bf%e7%94%a8kubeadm%e6%90%ad%e5%bb%ba%e7%9a%84k8s%e7%8e%af%e5%a2%83%e4%b8%ad%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%85%e4%bb%aa%e8%a1%a8%e7%9b%98%e3%80%81metallb%e5%92%8c%e8%b4%9f\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=35644"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35644\/revisions"}],"predecessor-version":[{"id":88337,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35644\/revisions\/88337"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=35644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=35644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=35644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}