k8s之路-Rancher


k8s之路-Rancher
還是先碎碎念一下,近期需要在內部環境搭建一套k8s,暫時記錄一下,后續需要的話再整理一個體系

官方文檔:http://docs.rancher.cn/docs/rancher2.5/overview/_index 有問題,找文檔

一、Rancher、Docker、K8S等介紹(可略)

1.1 什么是 Rancher?

Rancher 是為使用容器的公司打造的容器管理平台。Rancher 簡化了使用 Kubernetes 的流程,開發者可以隨處運行 Kubernetes(Run Kubernetes Everywhere),滿足 IT 需求規范,賦能 DevOps 團隊。
Rancher 1.x 最初是為了支持多種容器編排引擎而構建的,其中包括 Rancher 自己的容器編排引擎 Cattle。但隨着 Kubernetes 在市場上的興起,Rancher 2.x 已經完全轉向了 Kubernetes。Rancher 2.x 可以部署和管理在任何地方運行的 Kubernetes 集群。
Rancher 可以創建來自 Kubernetes 托管服務提供商的集群,自動創建節點並安裝 Kubernetes 集群,或者導入任何已經存在的 Kubernetes 集群。

Rancher 通過支持集群的身份驗證和基於角色的訪問控制(RBAC),使系統管理員能夠從一個位置控制全部集群的訪問。Rancher 可以對集群及其資源進行詳細的監控和並在需要時發送告警,也可以將容器日志發送給外部日志系統,並通過應用商店與 Helm 集成。如果您具有外部 CI/CD 流水線系統,則可以將其與 Rancher 對接,如果沒有,Rancher 也提供了簡單易用的流水線來幫助您自動部署和升級工作負載。除此之外,Rancher 還有很多開箱即用的功能來幫助您更好的管理集群和業務應用,例如多集群應用,全局 DNS,服務網格,安全掃描,集群模版和基於 OPA 的策略管理等功能。

總而言之,Rancher 是一個全棧式的 Kubernetes 容器管理平台,也是一個可以在任何地方都能成功運行 Kubernetes 的工具。

1.2Run Kubernetes Everywhere

Kubernetes 已經成為了容器管理的標准。大多數雲服務和虛擬服務的提供商現在將 Kubernetes 作為標准的基礎設施。用戶可以使用 Rancher Kubernetes Engine(簡稱 RKE),或其他雲服務提供商的容器服務,如 GKE、AKS、 EKS 等,創建 Kubernetes 集群。用戶也可以將已有集群導入 Rancher,集中管理。

1.3滿足 IT 需求規范

Rancher 支持集中化認證、權限控制、監控和管理所有 Kubernetes 集群。您可以使用 Rancher 完成以下操作:

使用活動目錄(Active Directory)的認證信息訪問雲端 Kubernetes 集群,如 GKE、AKS、EKS 等。
設置用戶、用戶組、項目組、集群、雲服務的權限控制策略和安全策略。
一站式監控您名下所有集群的健康狀態。

1.4賦能 DevOps 開發團隊

Rancher 提供了一個簡單直接的用戶界面給 DevOps 工程師管理他們的應用程序。用戶不需要對 Kubernetes 有深入的了解,即可使用 Rancher。

Rancher 應用商店包含了一套內置的 DevOps 開發工具。Rancher 通過了一些雲原生的生態系統認證,包括安全工具、監控系統、容器鏡像、存儲和網絡驅動等。

以下的示意圖講述了 Rancher 在 IT 管理團隊和 DevOps 開發團隊之間扮演的角色。DevOps 團隊把他們的應用部署在他們選擇的雲上面,可以是公有雲,也可以是私有雲。IT 管理員負責管理用戶、集群、多雲之間的權限。

1.5Rancher API Server 的功能

Rancher API Server 是基於嵌入式 Kubernetes API Server 和 ETCD 數據庫建立的,它提供了以下功能:

1.6授權和角色權限控制#

用戶管理: Rancher API server 除了管理用戶在公司內部的使用的認證信息之外,還管理用戶訪問外部服務所需的認證信息,如登錄活動目錄或 GitHub 所需的賬號密碼。
授權: Rancher API server 負責管理權限控制策略 和 安全策略。

1.7使用 Kubernetes 的功能

運行 Kubernetes 集群: Rancher API server 可以在已有節點上運行 Kubernetes 集群 ,或對 Kubernetes 進行版本升級。
應用商店管理: Rancher 可以使用Helm Charts 應用商店重復部署應用。
項目管理: 項目,是 Rancher 中的一個概念,Kubernetes 中並沒有這個概念。項目由一個集群內的多個命名空間和多個訪問控制策略組成,允許用戶以組為單位,一次管理多個命名空間,對其進行 Kubernetes 相關操作。Rancher 用戶界面提供了 項目管理 和 項目內應用管理 兩個功能。
流水線: 流水線 可以幫助開發者快速高效地上線新軟件。Rancher 支持給每一個項目單獨配置流水線。
Istio: Rancher 與 Istio 集成,管理員或集群所有者可以將 Istio 交給開發者,然后開發者使用 Istio 執行安全策略,排查問題,或為快速發布、灰度發布和 A/B 測試進行流量控制。

1.8配置雲端基礎信息

同步節點信息: Rancher API server 可以同步集群內所有節點的信息。
配置雲端基礎信息: 當 Rancher 與雲服務提供商配置完了之后,可以在雲端動態配置新節點和持久化存儲。

1.9查看集群信息

日志: Rancher 可以跟多種主流日志工具集成,您可以設置 Rancher 日志。
監控: 使用 Rancher,您可以通過 Prometheus 監控集群節點、Kubernetes 組件、軟件部署的狀態和進度。您可以設置 集群監控 或 項目監控。
告警信息: 您需要隨時知道集群和項目的計划和非計划事件,才可以提高公司的運行效率。

1.10關於 Docker

Docker 是容器打包和運行時系統的標准,主要用於管理各個節點上的容器。開發者在 Dockerfiles 中構建容器鏡像,上傳到鏡像倉庫中,用戶只需從鏡像倉庫下載該鏡像文件,就可以開始使用。

鏡像倉庫分為公有鏡像倉庫和私有鏡像倉庫。Docker Hub 是市面上主流的公有鏡像倉庫。除了公有鏡像倉庫以外,很多企業為了節省網絡帶寬和提高鏡像資源使用率,也會配置自己的私有鏡像倉庫,提供給企業內部員工使用。

1.11關於 Kubernetes

Kubernetes 是容器和集群管理的標准。YAML 文件規定了組成一個應用所需的容器和其他資源。Kubernetes 提供了調度、伸縮、服務發現、健康檢查、密文管理和配置管理等功能。

Kubernetes 集群是什么
Kubernetes 集群 是由多個計算機(可以是物理機、雲主機或虛擬機)組成的一個獨立系統,通過 Kubernetes 容器管理系統,實現部署、運維和伸縮 Docker 容器等功能,它允許您的組織對應用進行自動化運維。

Kubernetes 集群中的節點角色
節點 是集群內的一個計算資源,節點可以是裸金屬服務器或虛擬機。根據節點的角色不同,我們把節點分為三類:etcd 節點、controlplane 節點和worker 節點,下文會講解三種節點的功能。一個 Kubernetes 集群至少要有一個 etcd 節點、一個 controlplane 節點 和 一個 worker 節點。

etcd 節點
etcd 節點 的主要功能是數據存儲,它負責存儲 Rancher Server 的數據和集群狀態。 Kubernetes 集群的狀態保存在etcd 節點 中,etcd 節點運行 etcd 數據庫。etcd 數據庫組件是一個分布式的鍵值對存儲系統,用於存儲 Kubernetes 的集群數據,例如集群協作相關和集群狀態相關的數據。建議在多個節點上運行 etcd,保證在節點失效的情況下,可以獲取到備份的集群數據。

etcd 更新集群狀態前,需要集群中的所有節點通過 quorum 投票機制完成投票。假設集群中有 n 個節點,至少需要 n/2 + 1(向下取整) 個節點同意,才被視為多數集群同意更新集群狀態。例如一個集群中有 3 個 etcd 節點,quorum 投票機制要求至少兩個節點同意,才會更新集群狀態。

集群應該含有足夠多健康的 etcd 節點,這樣才可以形成一個 quorum。對含有奇數個節點的集群而言,每新增一個節點,就會增加通過 quorum 投票機制所需節點的數量。

一般情況下,集群中只要配置三個 etcd 節點就能滿足小型集群的需求,五個 etcd 節點能滿足大型集群的需求。

Controlplane 節點
Controlplane 節點上運行的工作負載包括:Kubernetes API server、scheduler 和 controller mananger。這些節點負載執行日常任務,從而確保您的集群狀態和您的集群配置相匹配。因為 etcd 節點保存了集群的全部數據,所以 Controlplane 節點是無狀態的。雖然您可以在單個節點上運行 Controlplane,但是我們建議在兩個或以上的節點上運行 Controlplane,以保證冗余性。另外,因為 Kubernetes 只要求每個節點至少要分配一個角色,所以一個節點可以既是 Controlplane 節點,又是 etcd 節點。

Worker 節點
worker 節點運行以下應用:

Kubelet: 監控節點狀態的 Agent,確保您的容器處於健康狀態。
工作負載: 承載您的應用和其他類型的部署的容器和 Pod。
Worker 節點也運行存儲和網絡驅動;有必要時也會運行應用路由控制器(Ingress Controller)。Rancher 對 Worker 節點的數量沒有限制,您可以按照實際需要創建多個 Worker 節點。

1.12關於 Helm

Helm 是安裝 Rancher 高可用集群時會用到的工具。

Helm 是 Kubernetes 的軟件包管理工具。Helm chart 為 Kubernetes YAML manifest 文件提供了模板語法。通過 Helm,可以創建可配置的 Deployment YAML,而不是只能用靜態的 YAML。如果您想了解更多關於如何創建自己的應用商店應用(catalog),請查閱Helm 官方網站。

二、部署rancher以及k8s

以下操作均以單節點作為演示

2.1所需環境

Centos 7.x * 2
docker
kubernetes
docker
rancher

2.2硬件要求

2.3關閉SELinux(所有節點)

查看SELinux狀態:

[root@node ~]# sestatus

修改SELINUX為disabled:

[root@node ~]# vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

2.4關閉防火牆(所有節點)

查看防火牆狀態:

[root@node ~]# systemctl status firewalld.service

關閉防火牆:

[root@node ~]# systemctl stop firewalld.service

設置開機不啟動:

[root@node ~]# systemctl disable firewalld.service

查看是否成功:

[root@node ~]# systemctl is-enabled firewalld.service

disabled

2.5同步時間

[root@node ~]# yum -y install ntp

啟動服務,查看狀態並設置開機自啟

[root@node ~]# systemctl start ntpd.service
[root@node ~]# systemctl status ntpd.service
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 15:41:28 CST; 23h ago
 Main PID: 3909 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─3909 /usr/sbin/ntpd -u ntp:ntp -g
Mar 02 15:41:28 master ntpd[3909]: Listen normally on 4 lo ::1 UDP 123
Mar 02 15:41:28 master ntpd[3909]: Listen normally on 5 eno1 fe80::7b94:c6e6:5673:c105 UDP 123
Mar 02 15:41:28 master ntpd[3909]: Listening on routing socket on fd #22 for interface updates
Mar 02 15:41:28 master systemd[1]: Started Network Time Service.
Mar 02 15:41:28 master ntpd[3909]: 0.0.0.0 c016 06 restart
Mar 02 15:41:28 master ntpd[3909]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Mar 02 15:41:28 master ntpd[3909]: 0.0.0.0 c011 01 freq_not_set
Mar 02 15:41:35 master ntpd[3909]: 0.0.0.0 c614 04 freq_mode
Mar 02 15:58:21 master ntpd[3909]: 0.0.0.0 0612 02 freq_set kernel 8.697 PPM
Mar 02 15:58:21 master ntpd[3909]: 0.0.0.0 0615 05 clock_sync
[root@node ~]# systemctl enable ntpd.service

2.6修改節點名稱(所有節點)

方便通過名稱來查找相應節點

[root@node ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.105.137 node
192.168.105.191 node1

2.7安裝Docker

  • 卸載docker舊版本:
[root@node ~]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine\
  • 安裝相關工具類:
[root@node ~]# sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
  • 配置docker倉庫:
[root@node ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node ~]# cp docker-ce.repo /etc/yum.repos.d/
[root@node ~]# yum clean all
[root@node ~]# yum make cache
  • 安裝docker
[root@node ~]# sudo yum install docker-ce docker-ce-cli containerd.io
  • 啟動,並設置開機自啟
[root@node ~]# sudo systemctl start docker
[root@node ~]# sudo systemctl enable docker

2.8 安裝rancher

如果持久化使用,建議掛載目錄到宿主機

[root@node ~]# docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable

2.9登錄rancher

登錄設置好的端口,輸入admin密碼,選擇集群,點擊下一步

登陸進入后我們可以看到2.5版本特性

在右下角↘可以選擇中文,我們切換一下

查看界面可以看到本機local的集群K3S

2.10 創建k8s集群

點擊右上角添加集群

選擇自定義添加

輸入自定義名稱

這里有個私倉配置,但我們現在不配合,在后面步驟配置,然后接着點下一步

這里把所有的勾選一下,可以看到他讓我們把下面的命令輸入到子節點

我們在子節點輸入等待即可,一般不會出什么問題,如果有問題可以留言解決,成功了可以看到儀表盤

2.11 安裝 kubectl(主節點)

默認的rancher集群的node上,是沒有kubectl命令的,沒有了命令行感覺沒了靈魂,有時候用起來也很麻煩

這里我們下載kubectl 1.20.0,地址為:https://storage.googleapis.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl

由於眾所周知網絡問題可以到擺渡雲下載

鏈接: https://pan.baidu.com/s/1iSDDnW-7K5DNf5xMxkV9ug 提取碼: z8yp

我們把下載好的傳到主節點下,執行

[root@node ~]# chmod +x ./kubectl
[root@node ~]# mv ./kubectl /usr/local/bin/kubectl
測試一下
[root@node ~]# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

然后我們來連接一下集群,點擊Kubeconfig文件

可以看見提示:將配置保存到~/.kube/config,我們創建一下,然后點擊復制到剪貼板進行復制到文件

進行測試一下:

[root@node ~]# kubectl get nodes

三、rancher配置私倉

我們使用rancher大多數都是內部環境,基本都會用到Harbor私倉

那么我們怎么用rancher來進行拉取鏡像,這里再說一下Harbor兩種部署方式來進行拉取

一種是本地已有安裝的了Harbor私倉,方法與鏡像拉取上傳見我另一篇文章:k8s之路-harbor私倉部署

如果是自己部署的Harbor私倉,需要在自己的私倉中上傳Rancher的所用到的鏡像

還可以使用Rancher商店中的Harbor來進行部署,前提是需要有域名,也可以使用修改host的方式但是不推薦

點擊項目/命名空間

新建一個項目后點擊應用商店,點擊啟動

可以看到有很多耳熟能詳的應用,我們點擊Harbor

有兩處需要配置的地方 一個是密碼,另一個是域名以及證書

然后回到儀表盤,點擊子節點 ··· 點擊升級

選擇啟用,輸入用戶名密碼

等待安裝即可

四、部署應用

私倉部署完成我們就可以新建應用了,新建一個命名空間,我這里以nginx舉例

進去后 點擊升級,編輯一下配置,改成4c4000M

然后點擊部署

輸入名稱,nginx的鏡像地址,容器端口以及端口映射,我這里主機端口選擇隨機,然后點擊啟動

部署中...

可以看到已經成功,可執行后續操作

我們看一下站點是否啟動成功

也可以進入pod可以查看應用啟動情況

可以發現在rancher上部署項目比起使用kubectl命令或者新建YAML簡單的多,當然我們也可以使用YAML進行部署

我們來看一下剛剛部署完的nginx的YAML

apiVersion: v1
kind: Pod
metadata:
  annotations:
    cattle.io/timestamp: "2021-09-06T01:38:58Z"
    cni.projectcalico.org/podIP: 10.42.0.64/32
    cni.projectcalico.org/podIPs: 10.42.0.64/32
    field.cattle.io/ports: '[[{"containerPort":80,"dnsName":"nginx-nodeport","hostPort":0,"kind":"NodePort","name":"nginx","protocol":"TCP","sourcePort":0}]]'
    kubernetes.io/limit-ranger: 'LimitRanger plugin set: cpu, memory request for container
      nginx; cpu, memory limit for container nginx'
  creationTimestamp: "2021-09-06T01:38:59Z"
  generateName: nginx-66699557-
  labels:
    pod-template-hash: "66699557"
    workload.user.cattle.io/workloadselector: deployment-test-nginx
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:cattle.io/timestamp: {}
          f:field.cattle.io/ports: {}
        f:generateName: {}
        f:labels:
          .: {}
          f:pod-template-hash: {}
          f:workload.user.cattle.io/workloadselector: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"76322e7f-7538-459a-a297-1b25087a044c"}:
            .: {}
            f:apiVersion: {}
            f:blockOwnerDeletion: {}
            f:controller: {}
            f:kind: {}
            f:name: {}
            f:uid: {}
      f:spec:
        f:containers:
          k:{"name":"nginx"}:
            .: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":80,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:name: {}
                f:protocol: {}
            f:resources:
              .: {}
              f:limits:
                f:cpu: {}
                f:memory: {}
              f:requests:
                f:cpu: {}
                f:memory: {}
            f:securityContext:
              .: {}
              f:allowPrivilegeEscalation: {}
              f:capabilities: {}
              f:privileged: {}
              f:readOnlyRootFilesystem: {}
              f:runAsNonRoot: {}
            f:stdin: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
            f:tty: {}
        f:dnsPolicy: {}
        f:enableServiceLinks: {}
        f:restartPolicy: {}
        f:schedulerName: {}
        f:securityContext: {}
        f:terminationGracePeriodSeconds: {}
    manager: kube-controller-manager
    operation: Update
    time: "2021-09-06T01:38:59Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:cni.projectcalico.org/podIP: {}
          f:cni.projectcalico.org/podIPs: {}
    manager: calico
    operation: Update
    time: "2021-09-06T01:39:09Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          k:{"type":"ContainersReady"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Initialized"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Ready"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
        f:containerStatuses: {}
        f:hostIP: {}
        f:phase: {}
        f:podIP: {}
        f:podIPs:
          .: {}
          k:{"ip":"10.42.0.64"}:
            .: {}
            f:ip: {}
        f:startTime: {}
    manager: kubelet
    operation: Update
    time: "2021-09-06T01:39:22Z"
  name: nginx-66699557-72pl4
  namespace: test
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: nginx-66699557
    uid: 76322e7f-7538-459a-a297-1b25087a044c
  resourceVersion: "2782431"
  uid: ac37e50a-69b4-4ac9-a310-4a9b575c79eb
spec:
  containers:
  - image: 10.10.10.10:12345/devops/nginx:latest
    imagePullPolicy: Always
    name: nginx
    ports:
    - containerPort: 80
      name: nginx
      protocol: TCP
    resources:
      limits:
        cpu: 4m
        memory: 4000Mi
      requests:
        cpu: 4m
        memory: 4000Mi
    securityContext:
      allowPrivilegeEscalation: false
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
      runAsNonRoot: false
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-cf5st
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: znyw-app02-10-133-206-37
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-cf5st
    secret:
      defaultMode: 420
      secretName: default-token-cf5st
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2021-09-06T01:38:59Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2021-09-06T01:39:22Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2021-09-06T01:39:22Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2021-09-06T01:38:59Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://217788043fbe983ffd9b12ee4ff366b45175e7e2b23213311f0a16c738219def
    image: 10.10.10.10:12345/devops/nginx:latest
    imageID: docker-pullable://10.10.10.10:12345/devops/nginx@sha256:3f13b4376446cf92b0cb9a5c46ba75d57c41f627c4edb8b635fa47386ea29e20
    lastState: {}
    name: nginx
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2021-09-06T01:39:21Z"
  hostIP: 10.10.10.10
  phase: Running
  podIP: 10.42.0.64
  podIPs:
  - ip: 10.42.0.64
  qosClass: Guaranteed
  startTime: "2021-09-06T01:38:59Z"

我們切到服務發現可以看見nginx生成了兩個Service,nginx服務類型為 ClusterIP,nginx-nodeport服務服務類型為Node IP,我們訪問主機+端口映射為Node IP模式,ClusterIP類型可通過pod中互相訪問,Pod IP為Node IP集群ip。

這里簡單說一下
Node IP:Node節點的IP地址,即物理網卡的IP地址。
Pod IP:Pod的IP地址,即docker容器的IP地址,此為虛擬IP地址。
Cluster IP:Service的IP地址,此為虛擬IP地址。

五、負載均衡

我們找到負載均衡標簽,點擊添加規則

填入名稱,自定義端口,域名

然后我們點保存

找到節點機器,修改hosts

[root@node1 ~]# vim /etc/hosts

然后再修改一下訪問機器的hosts,再訪問一下

沒問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM