AWS EC2 上安裝 Kubernetes 的示例

學習下 Kubernetes - 生產(chǎn)級別的容器編排系統(tǒng)

官網(wǎng):https://kubernetes.io/zh/

Kubernetes 是用于自動部署,擴展和管理容器化應用程序的開源系統(tǒng)。

Kubernetes 特性:

  • 自動包裝。根據(jù)資源需求和其他約束自動放置容器,同時不會犧牲可用性,混合關鍵和最大努力的工作負載,以提高資源利用率并節(jié)省更多資源。

  • 橫向縮放。使用簡單的命令或 UI,或者根據(jù) CPU 的使用情況自動調(diào)整應用程序副本數(shù)。

  • 自動部署和回滾。Kubernetes 逐漸部署對應用程序或其配置的更改,同時監(jiān)視應用程序運行狀況,以確保它不會同時終止所有實例。 如果出現(xiàn)問題,Kubernetes會為您恢復更改,利用日益增長的部署解決方案的生態(tài)系統(tǒng)。

  • 存儲編排。自動安裝您所選擇的存儲系統(tǒng),無論是本地存儲,如公有云提供商 GCPAWS, 還是網(wǎng)絡存儲系統(tǒng) NFS, iSCSI, Gluster, Ceph, Cinder, 或 Flocker。

  • 自我修復。重新啟動失敗的容器,在節(jié)點不可用時,替換和重新編排節(jié)點上的容器,終止不對用戶定義的健康檢查做出響應的容器,并且不會在客戶端準備投放之前將其通告給客戶端。

  • 服務發(fā)現(xiàn)和負載均衡。不需要修改您的應用程序來使用不熟悉的服務發(fā)現(xiàn)機制,Kubernetes 為容器提供了自己的 IP 地址和一組容器的單個 DNS 名稱,并可以在它們之間進行負載均衡。

  • 密鑰 和 配置 管理。部署和更新密鑰和應用程序配置,不會重新編譯您的鏡像,不會在堆棧配置中暴露密鑰(secrets)。

  • 批處理。除了服務之外,Kubernetes還可以管理您的批處理和 CI 工作負載,如果需要,替換出現(xiàn)故障的容器。

Kubernetes 的核心概念

參考:Kubernetes 組件

一個典型的 Kubernetes 架構圖如下:


一個典型的 Kubernetes 架構圖

Master 組件

Master 組件提供的集群控制。Master 組件對集群做出全局性決策(例如:調(diào)度),以及檢測和響應集群事件(副本控制器的replicas字段不滿足時,啟動新的副本)。

Master 組件可以在集群中的任何節(jié)點上運行。然而,為了簡單起見,設置腳本通常會啟動同一個虛擬機上所有 Master 組件,并且不會在此虛擬機上運行用戶容器。

API 服務器
kube-apiserver 對外暴露了Kubernetes API。它是的 Kubernetes 前端控制層。它被設計為水平擴展,即通過部署更多實例來縮放。

etcd
etcd 用于 Kubernetes 的后端存儲。所有集群數(shù)據(jù)都存儲在此處,始終為您的 Kubernetes 集群的 etcd 數(shù)據(jù)提供備份計劃。

kube-controller-manager
kube-controller-manager 運行控制器,它們是處理集群中常規(guī)任務的后臺線程。邏輯上,每個控制器是一個單獨的進程,但為了降低復雜性,它們都被編譯成獨立的可執(zhí)行文件,并在單個進程中運行。

這些控制器包括:

  • 節(jié)點控制器: 當節(jié)點移除時,負責注意和響應。
  • 副本控制器: 負責維護系統(tǒng)中每個副本控制器對象正確數(shù)量的 Pod。
  • 端點控制器: 填充 端點(Endpoints) 對象(即連接 Services & Pods)。
  • 服務帳戶和令牌控制器: 為新的命名空間創(chuàng)建默認帳戶和 API 訪問令牌.

云控制器管理器-(cloud-controller-manager)
cloud-controller-manager 是用于與底層云提供商交互的控制器。

以下控制器具有云提供商依賴關系:

  • 節(jié)點控制器: 用于檢查云提供商以確定節(jié)點是否在云中停止響應后被刪除。
  • 路由控制器: 用于在底層云基礎架構中設置路由。
  • 服務控制器: 用于創(chuàng)建,更新和刪除云提供商負載平衡器。
  • 數(shù)據(jù)卷控制器: 用于創(chuàng)建,附加和裝載卷,并與云提供商進行交互以協(xié)調(diào)卷。

調(diào)度器 - (kube-scheduler)
kube-scheduler 監(jiān)視沒有分配節(jié)點的新創(chuàng)建的 Pod,選擇一個節(jié)點供他們運行。

插件(addons)
插件是實現(xiàn)集群功能的 Pod 和 Service。
Pods 可以通過 Deployments,ReplicationControllers 管理。插件對象本身是受命名空間限制的,被創(chuàng)建于 kube-system 命名空間。

DNS
雖然其他插件并不是必需的,但所有 Kubernetes 集群都應該具有Cluster DNS許多示例依賴于它。

Cluster DNS 是一個 DNS 服務器,和您部署環(huán)境中的其他 DNS 服務器一起工作,為 Kubernetes 服務提供 DNS 記錄。
Kubernetes 啟動的容器自動將 DNS 服務器包含在 DNS 搜索中。

用戶界面
控制面板 Dashboard 提供了集群狀態(tài)的只讀概述。

容器資源監(jiān)控
容器資源監(jiān)控 將關于容器的一些常見的時間序列度量值保存到一個集中的數(shù)據(jù)庫中,并提供用于瀏覽這些數(shù)據(jù)的界面。

集群層面日志
集群層面日志 機制負責將容器的日志數(shù)據(jù)保存到一個集中的日志存儲中,該存儲能夠提供搜索和瀏覽接口。

節(jié)點組件

節(jié)點組件在每個節(jié)點上運行,維護運行的 Pod 并提供 Kubernetes 運行時環(huán)境。

kubelet
kubelet 是主要的節(jié)點代理,它監(jiān)測已分配給其節(jié)點的 Pod(通過 apiserver 或通過本地配置文件),提供如下功能:

  • 掛載 Pod 所需要的數(shù)據(jù)卷(Volume)。
  • 下載 Pod 的 secrets。
  • 通過 Docker 運行(或通過 rkt)運行 Pod 的容器。
  • 周期性的對容器生命周期進行探測。
  • 如果需要,通過創(chuàng)建 鏡像 Pod(Mirror Pod) 將 Pod 的狀態(tài)報告回系統(tǒng)的其余部分。
  • 將節(jié)點的狀態(tài)報告回系統(tǒng)的其余部分。

kube-proxy
kube-proxy 通過維護主機上的網(wǎng)絡規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā),實現(xiàn)了Kubernetes服務抽象。

docker
Docker 用于運行容器。

rkt
支持 rkt 運行容器作為 Docker 的試驗性替代方案。

supervisord
supervisord 是一個輕量級的進程監(jiān)控系統(tǒng),可以用來保證 kubelet 和 docker 運行。

fluentd
fluentd 是一個守護進程,它有助于提供集群層面日志 集群層面的日志。

在 AWS 上使用 Kubernetes 方式1:使用 Amazon EKS

參見:什么是 Amazon EKS?
Amazon Elastic Container Service for Kubernetes (Amazon EKS) 是一項托管服務,可讓您在 AWS 上輕松運行 Kubernetes,而無需支持或維護您自己的 Kubernetes 控制層面。

Amazon EKS 運行最新版本的開源 Kubernetes 軟件,因此您可以使用 Kubernetes 社區(qū)的所有現(xiàn)有插件和工具。在 Amazon EKS 上運行的應用程序與在任何標準 Kubernetes 環(huán)境中運行的應用程序完全兼容,無論此類環(huán)境是在本地數(shù)據(jù)中心還是在公有云中運行都是如此。這意味著,您可以輕松地將任何標準 Kubernetes 應用程序遷移到 Amazon EKS,而無需進行任何代碼修改。

Amazon EKS 入門是很輕松的:

  • 首先,在 AWS 管理控制臺中或使用 AWS CLI 或 AWS 開發(fā)工具包之一創(chuàng)建一個 Amazon EKS 集群。


  • 然后,啟動向此 Amazon EKS 集群注冊的工作線程節(jié)點。我們?yōu)槟峁┝艘粋€可自動配置您的節(jié)點的 AWS CloudFormation 模板。

  • 在集群準備就緒時,可以將常用 Kubernetes 工具(如 kubectl)配置為與集群通信。

  • 像在任何其他 Kubernetes 環(huán)境中一樣在 Amazon EKS 集群上部署和管理應用程序。

在 AWS 上使用 Kubernetes 方式2:手動來操作

登陸到一臺 EC2 主機:ssh -i "XiangSecret.pem" ec2-user@52.14.52.46
關于 AWS EC2 的創(chuàng)建,參見: AWS 第一個 NodeJS 應用程序

準備工作

確保已成功安裝 awscli

可以通過 aws 來確認:

awscli

安裝 kubectl

什么是 kubectl? kubectl 是 Kubernetes 命令行工具,它通過 Kubernetes API 來管理部署。
參見:安裝 kubectl

curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

可以通過 kubectl version --short --client 查看 kubectr 版本:

查看 kubectr 版本

PS:如果碰到權限問題,請使用 sudo

安裝 kops

什么是 kops?https://github.com/kubernetes/kops

kops 是官方推薦的工具,用來在 AWS 生產(chǎn)環(huán)境中,快速地部署 Kubernetes 集群。
We like to think of it as kubectl for clusters.
kops helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services) is currently officially supported.

參見:

wget https://github.com/kubernetes/kops/releases/download/1.10.0/kops-linux-amd64
chmod +x kops-linux-amd64
mv kops-linux-amd64 /usr/local/bin/kops

可以通過 kops version 查看 kops 版本:

查看 kops 版本

創(chuàng)建 IAM 用戶

為了使用 kops 部署集群,還需要為 kops 創(chuàng)建一個 IAM 用戶 kops,并分配相應的權限。包括:

  • AmazonEC2FullAccess
  • AmazonRoute53FullAccess
  • AmazonS3FullAccess
  • IAMFullAccess
  • AmazonVPCFullAccess
aws iam create-group --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops
aws iam create-user --user-name kops
aws iam add-user-to-group --user-name kops --group-name kops

kops 用戶創(chuàng)建密鑰:

aws iam create-access-key --user-name kops

上面的命令會返回 kops 用戶的 AccessKeyIDSecretAccessKey

image.png

創(chuàng)建后,我們可以在 AWS 控制臺的 UI 上看到用戶:kops

在 AWS 控制臺的 UI 上看到用戶:kops

接著通過 aws configure 更新 awscli的配置,讓它使用新創(chuàng)建的 kops 用戶的密鑰:

更新 awscli的配置

同時還需要將 kops 用戶的密鑰導出到命令行的環(huán)境變量:其實是寫入 ~/.bashrc 文件

echo 'export AWS_ACCESS_KEY_ID=...' >> ~/.bashrc
echo 'export AWS_SECRET_ACCESS_KEY=...' >> ~/.bashrc
echo 'export AWS_REGION=us-east-2' >> ~/.bashrc

最后是生成 SSH 密鑰:生成的密鑰位置 /home/ec2-user/.ssh/id_rsa.pub

ssh-keygen

配置 S3 Bucket

需要創(chuàng)建一個 S3 bucket,用于存儲集群的數(shù)據(jù),例如,這里我們將這個 bucket 命名為 xiang.k8s.local-state,同時寫到到環(huán)境變量 KOPS_STATE_STORE
(PS:這里用 xiang 是因為我的名字里有 xiang,不代表你也一定要這么用)

aws s3api create-bucket --bucket xiang.k8s.local-state --create-bucket-configuration LocationConstraint=us-east-2

echo 'export KOPS_STATE_STORE=s3://xiang.k8s.local-state' >> ~/.bashrc

創(chuàng)建后,我們可以在 AWS 控制臺的 UI 上看到S3 bucket:xiang.k8s.local-state

在 AWS 控制臺的 UI 上看到S3 bucket:xiang.k8s.local-state

創(chuàng)建集群

在上面的準備工作完成后,我們可以開始創(chuàng)建 Kubernetes 集群。

創(chuàng)建集群的配置文件

下面的命令會創(chuàng)建集群的配置文件,并不會真正地創(chuàng)建集群:

kops create cluster \
    --name=xiang.k8s.local \
    --zones=us-east-2b  \
    --master-size="t2.micro" \
    --node-size="t2.micro"  \
    --ssh-public-key="~/.ssh/id_rsa.pub"

注意:

  • xiang.k8s.local 是什么呢?為了讓 kops 創(chuàng)建基于 gossip 的集群,集群的命名需要使用 .k8s.local 作為后綴,例如,這里我們將集群命名為 xiang.k8s.local
  • t2.micro 是什么呢?它是一種 EC2 實例的類型
  • ~/.ssh/id_rsa.pub 其實就是上面我們通過 ssh-keygen 來創(chuàng)建的

在創(chuàng)建集群之前,可以檢查集群的配置文件是否正確:

kops edit cluster xiang.k8s.local

創(chuàng)建集群

如果確認沒問題,就可以使用下面的命令創(chuàng)建集群:

kops update cluster xiang.k8s.local --yes

創(chuàng)建集群之后,需要一段時間等待集群的初始化,我們可以通過 kops validate cluster 來檢查集群的創(chuàng)建狀態(tài):

[ec2-user@ip-172-31-38-187 ~]$ kops validate cluster
Using cluster from kubectl context: xiang.k8s.local

Validating cluster xiang.k8s.local

INSTANCE GROUPS
NAME            ROLE    MACHINETYPE MIN MAX SUBNETS
master-us-east-2b   Master  t2.micro    1   1   us-east-2b
nodes           Node    t2.micro    2   2   us-east-2b

NODE STATUS
NAME                        ROLE    READY
ip-172-20-44-223.us-east-2.compute.internal node    True
ip-172-20-54-238.us-east-2.compute.internal master  True
ip-172-20-59-124.us-east-2.compute.internal node    True

Your cluster xiang.k8s.local is ready

等待集群起來之后,可以在 AWS 控制臺的 UI 上看到新創(chuàng)建的 EC2 實例:


可以在 AWS 控制臺的 UI 上看到產(chǎn)生的集群,包括一個 master,兩個 node

每一個實例對應一個 Kunernetes 中的節(jié)點 Node,其中一個的角色為 master,另外兩個的角色為 node 具體信息如下:

  • EC2 實例名稱:master-us-east-2b.masters.xiang.k8s.local

    • 公有 IP:3.16.188.170
    • 公有 DNS:ec2-3-16-188-170.us-east-2.compute.amazonaws.com
    • 私有 IP:172.20.54.238
    • 對應的 Kunernetes 節(jié)點名稱:ip-172-20-54-238.us-east-2.compute.internal(其實這就是私有 DNS)
  • EC2 實例名稱:nodes.xiang.k8s.local

    • 公有 IP:3.16.181.109
    • 公有 DNS:ec2-3-16-181-109.us-east-2.compute.amazonaws.com
    • 私有 IP:172.20.44.223
    • 對應的 Kunernetes 節(jié)點名稱:ip-172-20-44-223.us-east-2.compute.internal(其實這就是私有 DNS)
  • EC2 實例名稱:nodes.xiang.k8s.local

    • 公有 IP:18.223.182.144
    • 公有 DNS:ec2-18-223-182-144.us-east-2.compute.amazonaws.com
    • 私有 IP:172.20.59.124
    • 對應的 Kunernetes 節(jié)點名稱:ip-172-20-59-124.us-east-2.compute.internal(其實這就是私有 DNS)

我們也可以在 AWS 控制臺的 UI 上看到 xiang.k8s.local-state 這個 S3 Bucket 包含對應的文件,用于存儲集群的數(shù)據(jù):

xiang.k8s.local-state 這個 S3 Bucket 包含對應的文件

操作集群

在上述步驟結束之后,kops 會配置好 Kubernetes 的命令行工具 kubectl,配置的內(nèi)容包括 Kubernetes 集群的 API endpoint 端口和身份認證信息。此后,我們就可以使用 kubectl 來操作 Kubernetes 集群了。

使用 kubectl get nodes 來查看節(jié)點信息

[ec2-user@ip-172-31-38-187 ~]$ kubectl get nodes
NAME                                          STATUS    ROLES     AGE       VERSION
ip-172-20-44-223.us-east-2.compute.internal   Ready     node      2h        v1.10.6
ip-172-20-54-238.us-east-2.compute.internal   Ready     master    2h        v1.10.6
ip-172-20-59-124.us-east-2.compute.internal   Ready     node      2h        v1.10.6

使用 kubectl cluster-info 來查看集群信息

[ec2-user@ip-172-31-38-187 ~]$ kubectl cluster-info
Kubernetes master is running at https://api-xiang-k8s-local-ips5k0-118730418.us-east-2.elb.amazonaws.com
KubeDNS is running at https://api-xiang-k8s-local-ips5k0-118730418.us-east-2.elb.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

api-xiang-k8s-local-ips5k0-118730418.us-east-2.elb.amazonaws.com 這又是個什么呢?好像剛剛創(chuàng)建的三個 EC2 的實例都不叫這個域名。
我們打開 AWS 控制臺,可以看到自動自動創(chuàng)建了一個 負載均衡器 api-xiang-k8s-local-ips5k0,它提供了這個域名:

負載均衡器 api-xiang-k8s-local-ips5k0

獲取 kube 和 admin 這兩個賬戶的密碼

我們可以通過下面的命令獲取 kubeadmin 這兩個賬戶的密碼:

kops get secrets kube --type secret -oplaintext
kops get secrets admin --type secret -oplaintext

在設置之后,可以通過 kubectl config view 看到用戶名和密碼:

kubectl config view 看到用戶名和密碼

登陸到 Master 和 Node 看看?

我們已經(jīng)知道了 Master 和 Node 的 DNS 和 IP 地址。

我們通過如下命令登陸到 Master:

ssh admin@3.16.188.170 (公有 IP 或者 公有 DNS)

我們可以看到 Master 上已經(jīng)安裝好了 Docker 和 kubectl

我們通過如下命令分別登陸到兩個 Node,同樣, Node 上已經(jīng)安裝好了 Docker 和 kubectl。

ssh admin@3.16.181.109 (公有 IP 或者 公有 DNS)

ssh admin@18.223.182.144 (公有 IP 或者 公有 DNS)

部署 Kubernetes 的控制面板 Dashboard

通過下面的命令到部署 Kubernetes 的控制面板 Dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

部署成功后,我們可以通過如下的網(wǎng)址訪問 Dashboard:

https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

在這里 <master-ip>api-xiang-k8s-local-ips5k0-118730418.us-east-2.elb.amazonaws.com(通過 kubectl cluster-info 命令獲得),<apiserver-port>443,通過如下的網(wǎng)址訪問 Dashboard:
https://api-xiang-k8s-local-ips5k0-118730418.us-east-2.elb.amazonaws.com:443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

如果彈出一個登陸框,用戶名輸入 kube,密碼為上述步驟中為 kube 用戶設置的密碼。
接下累可能需要第二次 Login,選擇 Token,密碼為上述步驟中為 admin 用戶設置的密碼:

Login

操作 Kubernetes 的控制面板 Dashboard

具體玩法,參見:Kubernetes Web UI (Dashboard)

可以看到目前有三個 Namespace 和 三個 Node:


三個 Namespace

三個 Node

銷毀集群

在銷毀集群之前,需要先確認一下 kops 會刪除哪些資源:

kops delete cluster --name xiang.k8s.local

如果確認沒問題,就可以真正刪除集群:

kops delete cluster --name xiang.k8s.local --yes

發(fā)布一個容器化應用到 Kubernetes

部分參考:Kubernetes: How to deploy a containerized app in Kubernetes using Kubernetes dashboard
我們回到 Kubernetes Dashboard,點擊右上角的 CREATE:

在上一篇文章 AWS EC2 上安裝 Docker 的示例 中,我創(chuàng)建了一個 Docker 的鏡像:679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world,內(nèi)容很簡單,就是啟動一個 Apache 服務器,發(fā)布一個 index.html 頁面。
現(xiàn)在我們想要將它通過 Kubernetes 部署到容器中并運行。

選擇 CREATE AN APP:

  • App name 可以自由輸入,這里我們填寫 xiang-k8s-hello-world
  • Container image 中填入我們之前創(chuàng)建的并推送到 Amazon Elastic Container Registry 的 Docker 鏡像:679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world
  • Number of pods 填入 1,表示現(xiàn)在只需要一臺主機
  • Service 選擇 External
  • 端口填入 9999 9999,將容器上公開的端口 9999 映射到主機系統(tǒng)上的端口 9999
  • 最后點擊 DEPLOY
發(fā)布一個容器化應用到 Kubernetes

隨后,點擊 Overview 可以看到 Deployment,Replica Set 和 Pod 被成功創(chuàng)建,并且正在運行:

Deployment,Replica Set 和 Pod 被成功創(chuàng)建

具體信息如下:

  • 創(chuàng)建的 Deployment,即 Service:xiang-k8s-hello-world
  • 創(chuàng)建的 Replica Set:xiang-k8s-hello-world-5bc8b7fc8f
  • 創(chuàng)建的 Pod:xiang-k8s-hello-world-5bc8b7fc8f-xgm67

我們點擊進入到 Pod xiang-k8s-hello-world-5bc8b7fc8f-xgm67 的詳情頁面,可以看到它對應的 Node 是 ip-172-20-59-124.us-east-2.compute.internal(這是一個 私有 DNS):

Pod 對應的 Node

我們也可以點擊進入到 Node ip-172-20-59-124.us-east-2.compute.internal 的詳情頁面,可以看到它對應的 IP 和域名:

Node 對應的 IP 和域名

可以看出,這就是我們在上面所創(chuàng)建的三個 EC2 實例中的第三個實例,我們的應用 xiang-k8s-hello-world 就是部署在這個實例的 Docker 容器里。

  • InternalIP: 172.20.59.124
  • ExternalIP: 18.223.182.144
  • InternalDNS: ip-172-20-59-124.us-east-2.compute.internal
  • ExternalDNS: ec2-18-223-182-144.us-east-2.compute.amazonaws.com
  • Hostname: ip-172-20-59-124.us-east-2.compute.internal

回到 Pod 的詳情頁面,我們也可以看到 Event 的歷史,包括容器的創(chuàng)建,獲取鏡像等等:


Event 的歷史,包括容器的創(chuàng)建,獲取鏡像等等

我們也可以點擊進入到 Service xiang-k8s-hello-world 的詳情頁面,看到對應的 Internal endpoints 和 External endpoints:

對應的 Internal endpoints 和 External endpoints

我們也可以通過 kubectl get services xiang-k8s-hello-worldkubectl describe svc xiang-k8s-hello-world 命令查看該 Service 的詳情:

[ec2-user@ip-172-31-38-187 ~]$ kubectl get services xiang-k8s-hello-world
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP        PORT(S)          AGE
xiang-k8s-hello-world   LoadBalancer   100.64.223.195   ad7cddd5fe8b7...   9999:30009/TCP   1d
[ec2-user@ip-172-31-38-187 ~]$ kubectl describe svc xiang-k8s-hello-world
Name:                     xiang-k8s-hello-world
Namespace:                default
Labels:                   k8s-app=xiang-k8s-hello-world
Annotations:              <none>
Selector:                 k8s-app=xiang-k8s-hello-world
Type:                     LoadBalancer
IP:                       100.64.223.195
LoadBalancer Ingress:     ad7cddd5fe8b711e8a334061f750d5e6-1358820683.us-east-2.elb.amazonaws.com
Port:                     tcp-9999-9999-9tlmx  9999/TCP
TargetPort:               9999/TCP
NodePort:                 tcp-9999-9999-9tlmx  30009/TCP
Endpoints:                100.96.1.3:9999
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age               From                Message
  ----    ------                ----              ----                -------
  Normal  EnsuringLoadBalancer  59m (x2 over 1d)  service-controller  Ensuring load balancer
  Normal  Type                  59m               service-controller  NodePort -> LoadBalancer
  Normal  EnsuredLoadBalancer   59m (x2 over 1d)  service-controller  Ensured load balancer

ad7cddd5fe8b711e8a334061f750d5e6-1358820683.us-east-2.elb.amazonaws.com 又是從哪里來的呢?我們打開 AWS 控制臺,可以看到自動自動創(chuàng)建了一個 負載均衡器 ad7cddd5fe8b711e8a334061f750d5e6,它提供了這個域名:

負載均衡器 ad7cddd5fe8b711e8a334061f750d5e6

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容