Kate Li (Taiwan)的部落格

首頁

istio和identity platform使用gke cloud run最終用戶認證

作者 iacona 時間 2020-02-18
all

這一導遊使用Istio認證策略及Identity Platform,在GKE的Cloud Run中發佈的應用程序中顯示最終用戶。為了認證,如果使用Istio的話,驗證邏輯不需要屬於應用程序。這樣分開的話,可以在不同組中負責應用應用應用應用程序和認證政策,並應用到多個應用應用程序或服務的全部。

介紹

GKE的Cloud Run提供GKE運行的應用程序和功能的開發者中心環境。這是為開發組提供服務器RIS環境,提供需求的自動擴張、藍色-綠色的部署,提供互聯網管理等。GKE的Cloud Run是以Istio和Knative為基礎,與Google Cloud Platform(GCP)的產品相通。

下一個圖表顯示這個導遊的基礎。

這個導遊使用Identity Platform支持最終用戶登錄,但是支持OpenID Connect的其他供應商(例如Google登入,Firebase認證,其他服務(例如:Auth 0,Gluu,Okta,Ping Identity)、Openct Conct的直接調試。

目標

成本

這一條街結束後,可以删除創建的資源,使費用不繼續請求。詳細的內容請參攷删除。

開始之前.

從GCP Console移動到項目選擇器頁面。

移動到項目選擇器頁面

選擇GCP項目或創建。

確認您是否在Google Cloud Platform項目中使用了結算。請査詢是否在項目中使用結算的方法。

API使用設定

從GCP Console移動到項目選擇器頁面。

移動到項目選擇器頁面

選擇GCP項目或創建。

確認您是否在Google Cloud Platform項目中使用了結算。請査詢是否在項目中使用結算的方法。

API使用設定

環境初始化

此扇區設定導遊後部使用的環境變數和gcloud預設值。

gcloud gcloud

選擇在GCP Console的項目下落使用的項目。

打開Cloud shell

移動到Cloud Sell

使用Cloud shell執行導遊的所有指令。

此導遊中使用的Compute Engine區域及GKE Claster名稱的環境變數和gcloud預設值。

gcloud ZONE=us-central1-c CLUSTER=cloud-run-gke-auth-tutorial gcloud config set compute/zone $ZONE gcloud config set run/cluster $CLUSTER gcloud config set run/cluster_location $ZONE

您可以更改區域及用戶端名稱。

選擇在GCP Console的項目下落使用的項目。

打開Cloud shell

移動到Cloud Sell

使用Cloud shell執行導遊的所有指令。

此導遊中使用的Compute Engine區域及GKE Claster名稱的環境變數和gcloud預設值。

gcloud gcloud ZONE=us-central1-c CLUSTER=cloud-run-gke-auth-tutorial gcloud config set compute/zone $ZONE gcloud config set run/cluster $CLUSTER gcloud config set run/cluster_location $ZONE

您可以更改區域及用戶端名稱。

創建Cloud Run所使用的GKE Claster

創建Cloud Run和Istio附件的GKE Clouster。

查找公開IP地址

GKE的Cloud Run將外部服務暴露到Istio Insgress Gaeway的公開IP地址。

istio-ingresgateway Kubernetes服務用外部IP地址生成狀態。

istio-ingressgateway kubectl get services istio-ingressgateway -n istio-system --watch

EXTERNAL-IP值在pending轉換到IP地址為止。如果出現NotFound錯誤,將在等待1分鐘後重新運行命令。如果要中斷待機,就按Control+C。

EXTERNAL-IP pending NotFound

伊斯蒂奧入口入口入口의공개IP주소를잰장할환경변수를만듭니다。

export EXTERNAL_IP=$(kubectl get services istio-ingressgateway \ --namespace istio-system \ --output jsonpath='{.status.loadBalancer.ingress[0].ip}')

顯示Istio Insgress Gaeway的公開IP地址。以後需要這個地址。

echo $EXTERNAL_IP

istio-ingresgateway Kubernetes服務用外部IP地址生成狀態。

istio-ingressgateway istio-ingressgateway kubectl get services istio-ingressgateway -n istio-system --watch

EXTERNAL-IP值在pending轉換到IP地址為止。如果出現NotFound錯誤,將在等待1分鐘後重新運行命令。如果要中斷待機,就按Control+C。

EXTERNAL-IP pending NotFound EXTERNAL-IP pending NotFound

創建了保存Istio Ingress Gaeway公開IP地址的環境變數。

export EXTERNAL_IP=$(kubectl get services istio-ingressgateway \ --namespace istio-system \ --output jsonpath='{.status.loadBalancer.ingress[0].ip}')

顯示Istio Insgress Gaeway的公開IP地址。以後需要這個地址。

echo $EXTERNAL_IP $EXTERNAL_IP

設定Identity Platform

打開Cloud shell,訪問GCP Marketplace,在新網絡流覽器窗口中使用Identity Platform。

從GCP Marketplace移動到Identity Platform

在項目選中下落選中選擇Identity Platform的GCP項目。GKE Claster和Identity Platform可在另一個GCP項目中設定。為了簡單的進行,這個導遊使用相同的項目。

點擊Identity Platform使用設定。

當前位置是GCP Console Identity Platform供應商頁面。

在供應商頁面點擊供應企業的新增。

從供應商選中下移,選擇電子郵件/密碼。自體應用程序可以選擇配寘的供應商。

確認是否已選中使用。

允許沒有密碼的登入。

點擊保存。

移動到Identity Platform設定頁面。

點擊功能變數名稱新增。正在打開獲勝的功能變數名稱對話方塊。

在功能變數名稱框中蒐索的Istio Insgress Gaeway的公開IP地址($EXTERNAL&UP IP)。

$EXTERNAL_IP

點擊加價。對話方塊關閉。輸入的IP地址在獲勝的功能變數名稱桌上。

點擊保存Identity Platform配寘頁面。

打開Cloud shell,訪問GCP Marketplace,在新網絡流覽器窗口中使用Identity Platform。

從GCP Marketplace移動到Identity Platform

在項目選中下落選中選擇Identity Platform的GCP項目。GKE Claster和Identity Platform可在另一個GCP項目中設定。為了簡單的進行,這個導遊使用相同的項目。

點擊Identity Platform使用設定。

當前位置是GCP Console Identity Platform供應商頁面。

在供應商頁面點擊供應企業的新增。

從供應商選中下移,選擇電子郵件/密碼。自體應用程序可以選擇配寘的供應商。

確認是否已選中使用。

允許沒有密碼的登入。

點擊保存。

移動到Identity Platform設定頁面。

點擊功能變數名稱新增。正在打開獲勝的功能變數名稱對話方塊。

在功能變數名稱框中蒐索的Istio Insgress Gaeway的公開IP地址($EXTERNAL&UP IP)。

$EXTERNAL_IP $EXTERNAL_IP

點擊加價。對話方塊關閉。輸入的IP地址在獲勝的功能變數名稱桌上。

點擊保存Identity Platform配寘頁面。

創建測試用戶

創建樣品應用程序

發放兩個服務的樣品應用程序。一項服務是公開服務後端使用者介面,其它服務是後端API。

點擊視窗右邊的應用程序設定細節連結。開啟應用配寘對話方塊。

顯示apiKey的值並複製到剪貼板(Chrome OS/Linux/Windows的話Control+C,macOS的話Cmd+C)。

點擊關閉,關閉應用配寘對話方塊。

Cloud shell創建環境變數,保存apiKey。在這裡api-key是Api-key在Aplication構成對話方塊中的apikey

api-key api-key export AUTH_APIKEY=api-key

創建authdomain的環境變數。

export AUTH_DOMAIN=$GOOGLE_CLOUD_PROJECT.firebaseapp.com

尅隆GitHub的Cloud Run樣品倉庫。

切換到一個導遊檔案的目錄。

cd cloud-run-samples/identity-platform/gke

在前臺JavaScript檔案中更改Identity Platform變數。

envsubst frontend/index.template.js frontend/index.js

樣品應用分佈

使用Cloud Build創建樣品應用程序的集裝箱形象。一個是前端,另一個是後端。

gcloud builds submit -t gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-frontend frontend gcloud builds submit -t gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-backend backend

Cloud Build在Container Registry保存形象。

在GKE Clouster中創建2個public和api的命名空間。

public api public api kubectl create namespace public kubectl create namespace api

將前端集裝箱的形象分發到public命名空間的服務,發給GKE的Cloud Run。

public public gcloud beta run deploy frontend \ --namespace public \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-frontend \ --platform gke

將後端集裝箱映射發送到api命名空間的服務中。

api api gcloud beta run deploy backend \ --namespace api \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-backend \ --platform gke

以URI路徑創建一個請求的Istio虛擬服務。

kubectl apply -f istio/virtualservice.yaml

此虛擬服務將以URI路徑/api/啟動的請求為後端API rowing,其他請求都是前端使用者介面。

/api/ /api/

確認後端API的非認證請求是否成功。

curl -si $EXTERNAL_IP/api/secure.json | head -n1

添加Istio認證政策

創建Istio認證政策。

envsubst istio/authenticationpolicy.template.yaml | kubectl apply -f -

此策略認證URI路徑以/api/api/healtz路徑除外。在前一部分中發佈的Istio虛擬服務規則,此政策認證後端API的請求。

/api/ /api/healthz /api/ /api/healthz while sleep 2; do curl -si $EXTERNAL_IP/api/secure.json | head -n1 done

解决試驗

$EXTERNAL_IP

這是對後端API的直接要求請求中沒有包含足够的用戶認證資訊,囙此在流覽器窗口中顯示Origin authentication failed(源認證失敗)。

用EXTERNAL IP地址打開流覽器窗口。要顯示登入表格。

$EXTERNAL_IP $EXTERNAL_IP

用於創建測試用戶的測試用戶登錄。

網頁上顯示測試用戶電子郵寄地址和The secret message is:Hello World(警衛資訊是Hello World)。顯示資訊需要一些時間。

/api/secure.json frontend/index.js

解决問題

如果這個導遊出現問題,請檢查下一個檔案。

删除

在這個導遊中使用的資源費用不被申請為GCP帳戶的方法如下。

移動到資源管理頁面

移動到資源管理頁面

删除資源

如果您想要保存在導遊中使用的GCP項目,將删除個別資源。

删除GKE索引

gcloud container clusters delete $CLUSTER --async --quiet

在Container Registry中删除樣品應用程序集裝箱形象。

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-frontend \ --force-delete-tags --quiet gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/cloud-run-gke-auth-backend \ --force-delete-tags --quiet

在Identity Platform中删除電子郵件/密碼ID供應商。

從GCP Console移動到Identity Platform供應商頁面。

移動到供應商頁面

在供應商桌上點擊電子郵件/密碼ID供應商。

在顯示的對話方塊中點擊删除。

從GCP Console移動到Identity Platform供應商頁面。

移動到供應商頁面

在供應商桌上點擊電子郵件/密碼ID供應商。

在顯示的對話方塊中點擊删除。

删除測試用戶。

移動到Identity Platform用戶頁面。

移動到用戶頁面

在顯示的對話方塊中點擊删除。

删除獲勝的功能變數名稱。

移動到Identity Platform設定頁面。

移動到配寘頁面

點擊Identity Platform配寘部分所添加的IP地址($EXTERNAL&IP)。

$EXTERNAL_IP

點擊保存。

移動到Identity Platform設定頁面。

移動到配寘頁面

點擊Identity Platform配寘部分所添加的IP地址($EXTERNAL&IP)。

$EXTERNAL_IP $EXTERNAL_IP

點擊保存。

下一步