亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TF+K8s輕松上手丨通過Kubernetes Ingres

發布時間:2020-02-26 17:14:27 來源:網絡 閱讀:218 作者:TF中文社區 欄目:網絡管理

本文所有相關鏈接pdf:https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case-2.pdf

Kubernetes的Ingress文檔頁面將其描述為:

“用于管理對集群中服務的外部訪問的API對象,通常是HTTP。Ingress可以提供負載均衡、SSL終結和基于名稱的虛擬主機。”

CNI不提供Ingress功能。這意味著Kubernetes集群管理者通常要為其集群安裝、管理和支持單獨的Ingress控制器解決方案。

對于沒有內置Ingress支持的本地和公共云中的Kubernetes部署,Tungsten Fabric捆綁了自己的Ingress控制器。它在后臺使用HAProxy并實現了Kubernetes Ingress文檔頁面中所述的所有基本功能。

在AWS上運行時,可以將Kubernetes 配置為使用AWS的Application Load Balancer (ALB)為其Ingress服務。通過這種方式的設置,沙箱中的Kubernetes可以最緊密地反映典型的現實部署場景。

下圖概述了示例應用程序的最終部署架構:

TF+K8s輕松上手丨通過Kubernetes Ingres

使用場景

Ingress控制器選項僅與使用HTTP或HTTPS的應用程序兼容。如果您的應用程序是這種情況,可能需要考慮使用Ingress來實現以下目標:

  • 使用HTTPS保護應用程序,然后通過配置Ingress進行SSL卸載來將程序公開在網絡上;和/或
  • 基于請求中的HTTP路徑,將傳入請求定向到不同的Kubernetes Services,例如,/blog/可以轉到Service A,而/account/可以轉到Service B,等等。和/或
  • 通過基于名字的虛擬主機,應用程序服務于多個DNS域,例如Host:頭設置為test.project.com的應用去Service C,而那些具有prod.project.com的去Service D。

通過Ingress公開示例應用

在探討上述三種情況之前,讓我們部署一個簡單的Ingress示例應用程序,類似于我們對 LoadBalancer的做法,然后在此基礎上進行構建。

確保您位于沙箱控制節點上,以root用戶身份登錄,并且位于正確的目錄中:

#確認您是root賬戶

whoami | grep root || sudo -s

#切換為清單目錄

cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml

#部署具有Ingress的示例程序

kubectl create -f cnawebapp-ingress-alb.yaml

幾分鐘后,部署過程應該完成了,我們應該能夠從Internet訪問示例應用程序。首先找到Ingress的DNS名稱:

TF+K8s輕松上手丨通過Kubernetes Ingres

根據上面的輸出,現在可以從Internet上的http://539db10e-default-yelbui-3c9c-1330819777.us-west-1.elb.amazonaws.com上訪問我們的示例應用程序。

利用在環境中運行上述命令獲得的DNS名稱訪問Yelb,以確保其有效。

使用HTTPS保護應用程序的安全

對于此練習,我們需要生成自簽名證書,并將其添加到AWS Certificate Manager。提供Ingress功能的AWS Application Load Balancer(ALB)需要使用此功能來執行加密。

注意:對于生產用途,可能需要通過AWS Certificate Manager的相應功能來獲得完整注冊域名的“適當”證書。由于我們只是在進行練習,因此將使用自簽名的虛構域。

步驟1:生成自簽名證書,并將其添加到AWS Certificate Manager

在安裝了具有Access和Secret密鑰的AWS CLI工具的主機上執行以下步驟。這里的密鑰允許您對Certificate Manager進行更改。

#為虛構的域名(yelb.mydomain.com)生成自簽名證書:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=yelb.mydomain.com"

#將新的證書加入到AWS Certificate Manager
#注意“--region” -這必須是同一個AWS區域
#在我們的例子中,運行Tungsten 沙箱時,它是“us-west-1”

aws acm import-certificate --certificate file://tls.crt --private-key file://tls.key --region us-west-1

如果一切順利,最后一條命令將顯示類似內容:

{
"CertificateArn": "arn:aws:acm:us-west-1:180612498884:certificate/e7341ff5-52ef-4a7b-94b5-05643ef6ab46"
}

我們將需要CertificateArn后面的值,以進行下一步。

步驟2:建立Ingress定義

確保您位于沙箱控制節點上,以root用戶身份登錄,并且位于正確的目錄中:

#確定您是root身份

whoami | grep root || sudo -s

#切換為清單目錄

cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml

現在,讓我們創建一個新的Ingress定義:
TF+K8s輕松上手丨通過Kubernetes Ingres

接下來,我們將CertificateArn放入。在運行該命令之前對其進行編輯,并用執行步驟1時獲得arn:aws:acm:us-west-1:180612498884:certificate/e7341ff5-52ef-4a7b-94b5-05643ef6ab46的值替換該命令CertificateArn。

sed-i"s#INSERT_CERT_ARN_HERE#arn:aws:acm:us-west-1:180612498884:certificate/e7341ff5-52ef-4a7b-94b5-05643ef6ab46#" ingress-https.yaml

如果命令成功運行,則ingress-https.yaml文件將具有自簽名證書的ARN,而不是字符串INSERT_CERT_ARN_HERE。

步驟3:建立HTTPS Ingress并進行測試

#創建新的 Ingress

kubectl create -f ingress-https.yaml

運行上述命令后,請等待幾分鐘,以使新的ALB Ingress出現。然后,讓我們找到已為其分配的DNS名稱,并嘗試連接到它:

TF+K8s輕松上手丨通過Kubernetes Ingres

從上面的輸出中,我們可以看到新Ingress的地址;讓我們看看它是否有效:
TF+K8s輕松上手丨通過Kubernetes Ingres

這說明它有效——我們可以通過加密連接訪問Yelb應用程序!

新拓撲看起來像這樣(請注意,我們仍然具有未在此圖中顯示的原始HTTP Ingress):
TF+K8s輕松上手丨通過Kubernetes Ingres

總結:為什么要這樣做?

除了增加最終用戶的連接安全性、隱私性和數據完整性外,實現HTTPS Ingress還有一些好處:

  • 應用程序消耗較少的計算資源,因為加密開銷已轉移到ALB;
  • 應用程序現在支持HTTP / 2,這是一件好事;
  • 可以輕松實現將 HTTP 自動重定向到HTTPS的功能。

清理

讓我們刪除添加的HTTPS Ingress,因為在本章的其余部分中我們不再需要它:

kubectl delete -f ingress-https.yaml

然后,在執行步驟1(生成自簽名證書并將其安裝到AWS Certificate Manager中)的計算機上,運行以下命令以刪除該證書,并確保使用您自己的值CertificateArn:

aws acm delete-certificate --certificate-arn arn:aws:acm:us-west-1:180612498884:certificate/e7341ff5-52ef-4a7b-94b5-05643ef6ab46

根據URL路徑定向請求

在某些情況下,您可能想在同一個DNS域名下運行多個應用程序。例如,www.corp.com可能支持您的主應用程序,而諸如WordPress之類的其他應用程序可能正在處理www.corp.com/blog。

對于本練習,我們假設您在“通過Ingress公開示例應用程序”這一章的開頭按照說明運行了Yelb副本。如果您是從頭開始,請跳至該部分,按照說明進行部署,然后再回來。

為了演示通過URL路徑進行的路由,我們將在環境中添加另一個部署,并相應地更新Ingress的配置。在此新配置下,Ingress會將對/路徑的請求定向到我們的主應用程序yelb,而對/echo的路徑請求將定向為新的應用程序EchoServer。

這是目標狀態的圖:
TF+K8s輕松上手丨通過Kubernetes Ingres

我們應該已經將Yelb的部分放置到位,所以我們添加EchoServer:

#創建EchoServer Deployment and Service 清單:

TF+K8s輕松上手丨通過Kubernetes Ingres

#現在部署它:

kubectl create -f echoserver.yaml

接下來,我們將為Ingress創建一個更新的配置。為此,我們將從中復制Ingress資源cnawebapp-ingress-alb.yaml,并在路由部分進行兩項更改:

  1. 將yelb的路徑從/*更新到/以免干擾echoserver;和

  2. 添加新的/echo路徑指向echoserver

注意:我們之所以要包含完整的資源定義而不是僅僅應用差異部分,是因為Ingress對象不支持戰略性合并修補。

#更新的Ingress資源:

TF+K8s輕松上手丨通過Kubernetes Ingres

#現在部署它:

kubectl apply -f ingress-paths.yaml

這里會顯示一個關于kubectl apply的警告,這個警告可以忽略。因為我們的更新資源在本質上與rules配置相同。

更新的配置在幾秒鐘內生效,之后我們就可以檢查基于URL的路由是否有效。當我們請求基本URL /(或為空)時,我們應該到達Yelb,如果請求/echo,我們應該返回的輸出是EchoServer。

#獲得Ingress的基本URL

baseUrl=$(kubectl get ing yelb-ui | grep amaz | awk '{print $3}')
echo "Our Ingress is at: ${baseUrl}"

#嘗試訪問$baseUrl ; 應當可以得到Yelb UI頁面的內容

curl http://${baseUrl}

#現在嘗試/echo ; 應當得到EchoServer的輸出

curl http://${baseUrl}/echo

服務多個DNS域

當您擁有多個域名,并且為每個域提供不同的應用程序,同時希望共享相同的Ingress基礎結構,此場景中的解決方案就很有用。這有助于節省成本,并且在某些情況下,與每個域名擁有專用的Ingress實例相比,其復雜性更低。

此練習建立在上一個基于URL定向請求的練習的基礎上。如果尚未完成,請回顧此前步驟,簡單地剪切并粘貼創建和部署echoserver.yaml清單的步驟。我們將為Ingress新建一個,因此無需創建和部署ingress-paths.yaml。

準備好后,您應該已經有了yelb的副本和echoserver的副本。您的Ingress配置是什么都無所謂,因為我們將覆蓋它。

在我們的目標狀態下,Ingress將定義兩個域名yelb.mydomain.com和echo.mydomain.com,并將根據Host:HTTP頭中的值來路由傳入的請求,Web瀏覽器會自動為您請求的URL的主機部分插入這些請求。

這是目標狀態的圖:
TF+K8s輕松上手丨通過Kubernetes Ingres
讓我們為Ingress創建并部署配置,該配置將執行所需的路由:

#更新的Ingress 資源:

TF+K8s輕松上手丨通過Kubernetes Ingres
#現在部署它:

kubectl apply -f ingress-hosts.yaml

配置成功應用后,我們就可以進行測試了。由于域名和主機形成映射,因此我們將利用curl添加正確的Host:標頭。當設置為yelb.mydomain.com,應該到達Yelb,設置為echo.mydomain.com時,應該返回輸出EchoServer。

#Get the base URL of our Ingress

baseUrl=$(kubectl get ing yelb-ui | grep amaz | awk '{print $3}')
echo "Our Ingress is at: ${baseUrl}"

#訪問Ingress Host: 設置成 yelb; 我們應當可以得到Yelb UI頁面的內容

curl http://${baseUrl} -H "Host: yelb.mydomain.com"

#現場嘗試訪問Host:設置成 echo;我們應當可以得到 EchoServer的輸出

curl http://${baseUrl} -H "Host: echo.mydomain.com"

清理

一旦進行了足夠的測試,請隨時清理:

#刪除“yelb”和“hoserver”應用:

kubectl delete -f cnawebapp-ingress-alb.yaml
kubectl delete -f echoserver.yaml

#刪除我們創建的額外的清單:

rm -f echoserver.yaml ingress-paths.yaml ingress-hosts.yaml

回顧和下一步

Kubernetes提供了三種將應用程序公開給外界的基本方式:LoadBalancer或NodePort服務類型以及Ingress。前兩個協議支持任意協議,但在協議智能方面并沒有增加太多。另一方面,Ingress提供了基于協議的功能,這使其僅與HTTP或HTTPS的應用程序兼容。

與其他功能類似,Kubernetes需要一個控制器來實現實際的Ingress功能——簡單地在Kubernetes API中創建Ingress資源并不能執行任何操作。Ingress控制器是Kubernetes集群管理員必須安裝、監視、修補和升級的軟件的一部分。Tungsten Fabric隨附有Ingress控制器,這將使此過程更加容易。

一旦確定了應用程序該如何公開于Internet,就需要考慮如何處理有關網絡訪問控制的問題。閱讀本指南中的用例3和用例4,我們將介紹其中的一些場景。

(本公眾號將陸續發布幾個用例的詳細內容,敬請關注)


MORE
更多TF+K8s文章
第一篇:TF Carbide 評估指南--準備篇
第二篇:通過Kubernetes的服務進行基本應用程序連接

TF+K8s輕松上手丨通過Kubernetes Ingres
關注微信:TF中文社區
TF+K8s輕松上手丨通過Kubernetes Ingres

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芦山县| 冕宁县| 志丹县| 五指山市| 区。| 鞍山市| 新昌县| 宣恩县| 临湘市| 驻马店市| 桐柏县| 连平县| 调兵山市| 福泉市| 霞浦县| 聂荣县| 徐州市| 宜宾市| 蓝山县| 余庆县| 葵青区| 永济市| 肥西县| 沂南县| 利津县| 河源市| 新化县| 韶关市| 胶南市| 枞阳县| 靖宇县| 长治县| 安西县| 马尔康县| 营山县| 沾化县| 苍山县| 磐安县| 游戏| 贞丰县| 六安市|