在 Satellite 叢集裡公開應用程式
安全地將您 Satellite 叢集內運行的應用程式暴露給來自公共網路的流量請求、來自連接至您主機私有網路的資源,或來自資源的流量請求 IBM Cloud。
您有數個選項可用來在 Satellite 叢集裡公開應用程式:
- MetalLB:適合本地Satellite叢集的
LoadBalancer實作。 - Red Hat OpenShift 路徑: 將應用程式快速公開至具有主機名稱的公用或專用網路要求。 Red Hat OpenShift Ingress 控制器為您的路徑提供 DNS 登錄及選用憑證。
- 協力廠商負載平衡器及 Red Hat OpenShift 路徑: 使用主機名稱來公開應用程式,並針對 Ingress 控制器的 DNS 記錄中登錄的主機 IP 位址新增性能檢查。
- NodePorts:公開非 HTTP (S) 應用程式,例如 UDP 或 TCP 應用程式,其 NodePort 在 30000 - 32767 的範圍內。
- Red Hat OpenShift 路徑及 Satellite 鏈結端點: 使用專用路徑公開您的應用程式,並為路徑建立
location類型的「鏈結」端點。 只有連接至 IBM Cloud 專用網路的資源才能存取您的應用程式。
設定 MetalLB
MetalLB 是一種針對裸機 Kubernetes 叢集的負載平衡器實作方案,採用標準路由協定。 如需更多資訊,請參閱文件 Red Hat OpenShift 中的 「關於 MetalLB」及「MetalLB 操作員」章節。
若要安裝和設定MetalLB,請依照Red Hat OpenShift文件中 安裝MetalLB Operator下的說明進行操作。
在您開始之前,請確定您有一個專用的子網路 (IPAddressPool) 供 LoadBalancer 服務的外部 IP 使用。 請檢查 IPAddressPool 中包含的 IP 位址是否未保留或用於其他用途,否則負載平衡功能可能會失敗。
透過 Red Hat OpenShift 路由公開應用程式
透過路由快速將叢集中的服務公開至 Ingress 控制器的 Red Hat OpenShift 外部 IP 位址。
Red Hat OpenShift route 會以 <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud 格式將服務公開為主機名稱。 系統預設會在您的叢集中部署一個
Ingress 控制器,這使得外部客戶端能夠使用這些路由。 Ingress 控制器會使用服務選擇器來查找該服務及其對應的端點。 您可以配置服務選取器,以透過一個路徑將資料流量導向多個服務。 您也可以使用 Ingress 控制器為您的主機名稱指派的 TLS 憑證,來建立未加密或加密的路由。 請注意,Ingress 控制器僅支援 HTTP 和 HTTPS 通訊協定。
在開始使用路由之前,請先檢閱下列考量。
- 主機網路連線功能
- 如果叢集的主機具有公用網路連線功能,則依預設會使用公用 Ingress 控制器來建立叢集。 您可以使用此 Ingress 控制器來建立應用程式的公用路徑。 如果叢集的主機僅具有專用網路連線功能,則依預設會使用專用 Ingress 控制器建立叢集。 您可以使用此 Ingress 控制器為應用程式建立只能從主機專用網路內存取的專用路徑。 若要在僅具有專用網路連線功能的叢集裡設定公用路徑,請先 設定您自己的協力廠商負載平衡器 (在專用 Ingress 控制器之前具有公用網路連線功能),然後再完成下列步驟。
- 性能檢查
- 依預設,會為叢集的 Ingress 控制器提供 DNS 登錄管理。 例如,如果您從位置移除指派給叢集的主機,並將它取代為不同的主機,則 IBM 會為您更新 Ingress 控制器的 DNS 記錄中的主機 IP 位址。 請注意,當為您提供路徑的 DNS 登錄時,叢集裡的 Ingress 控制器前面不會部署任何負載平衡器服務。 若要性能檢查 Ingress 控制器的 DNS 記錄中所登錄主機的 IP 位址,您可以在 Ingress 控制器之前 設定自己的協力廠商負載平衡器,然後再完成下列步驟。
若要建立應用程式的路徑,請執行下列動作:
-
為應用程式部署建立 Kubernetes
ClusterIP服務。 服務提供 Ingress 控制器可以將資料流量傳送至其中之應用程式的內部 IP 位址。oc expose deploy <app_deployment_name> --name my-app-svc -
設定應用程式的網域。
- IBM提供的網域: 如果您不需要使用自訂網域,則會以
<service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud格式為您產生路徑主機名稱。 繼續進行下一步。 - 自訂網域: 使用 DNS 提供者來建立自訂網域。 請注意,如果您先前在 Ingress 控制器前面設定協力廠商負載平衡器,請改為使用 DNS 提供者來建立負載平衡器的自訂網域。
- IBM提供的網域: 如果您不需要使用自訂網域,則會以
-
在 EXTERNAL-IP 直欄中取得 Ingress 控制器服務的 IP 位址。
oc get svc router-external-default -n openshift-ingress -
請透過您的 DNS 服務供應商建立自訂網域。 如果您想要對叢集裡的多個服務使用相同的子網域,則可以登錄萬用字元子網域,例如
*.example.com。 -
請將 IP 位址新增為 A 記錄,將您的自訂網域映射至 Ingress 控制器所對應的 IP 位址。
-
根據 您的應用程式所需的 TLS 終止類型 設定路由。 如果您沒有自訂網域,請不要包含
--hostname選項,以便為您產生路徑主機名稱。 如果您已登錄萬用字元子網域,請在您建立的每一個路徑中指定唯一子網域。 例如,您可以在此路徑中指定--hostname svc1.example.com,並在另一個路徑中指定--hostname svc2.example.com。- 簡式:
oc expose service <app_service_name> [--hostname <subdomain>] ``` * 透通: ```sh {: pre} oc create route passthrough --service <app_service_name> [--hostname <subdomain>] ``` 需要處理 HTTP/2 連接嗎? 建立路徑之後,請執行 `oc edit route <app_service_name>`,並將路徑的 `targetPort` 值變更為 `https`。 您可以執行 `curl -I --http2 https://<route> --insecure` 來測試路徑。 {: tip} * Edge: 如果您使用自訂網域,請包括 `--hostname`、`--cert` 和 `--key` 選項,以及選擇性地包括 `--ca-cert` 選項。 如需 TLS 證書要求的詳細資訊,請參閱 [Red Hat OpenShift 邊緣路由文件](https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ingress_and_load_balancing/routes#nw-ingress-creating-an-edge-route-with-a-custom-certificate_secured-routes){: external}。 ```sh {: pre} oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>] ``` * 重新加密: 如果您使用自訂網域,請包含 `--hostname`、`--cert` 和 `--key` 選項,以及選擇性地包含 `--ca-cert` 選項。 有關 TLS 憑證要求的詳細資訊,請參閱 [Red Hat OpenShift re-encrypt route 文件](https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ingress_and_load_balancing/routes#nw-ingress-creating-a-reencrypt-route-with-a-custom-certificate_secured-routes){: external}。 ```sh {: pre} oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>] ``` -
驗證已建立應用程式服務的路徑。
oc get routes -
選用項目: 使用 選用配置來自訂預設遞送規則。 例如,您可以使用特定於路由的 HAProxy 註解。
在 Red Hat OpenShift Ingress 控制器前面設定協力廠商負載平衡器
若要性能檢查 Ingress 控制器的 DNS 記錄中所登錄主機的 IP 位址,您可以在指派為叢集的工作者節點之主機的 IP 位址前面設定自己的協力廠商負載平衡器。
例如,如果您從位置移除指派給叢集的主機,並將它取代為不同的主機,則 IBM 會為您更新 Ingress 控制器的 DNS 記錄中的主機 IP 位址。 但是如果您關閉主機的電源 (例如透過雲端提供者的基礎架構管理),則主機的 IP 位址不會從 Ingress 控制器的 DNS 記錄中移除,而且如果 DNS 記錄解析為該主機的 IP 位址,則可能會導致呼叫失敗。 透過在 Ingress 控制器之前設定負載平衡器,您可以確保定期檢查主機 IP 位址的性能,例如確保正式作業層次工作負載的高可用性。
在 Ingress 控制器之前建立負載平衡器之後,您可以使用 Ingress 控制器來建立應用程式的路徑。 將要求傳送至應用程式的路徑時,負載平衡器會先接收要求,然後再轉遞至 Ingress 控制器,該控制器會將要求轉遞至應用程式。
-
列出叢集預設 Ingress 控制器的詳細資料。 在輸出的 EXTERNAL-IP 直欄中,取得針對叢集的 Ingress 控制器登錄的工作者節點 IP 位址。 在輸出的 PORT (S) 直欄中,視您要建立公用或專用負載平衡器而定,取得 Ingress 控制器服務目前針對公用或專用網路資料流量所公開的節點埠。
oc get svc router-external-default -n openshift-ingress在下列範例輸出中,針對公用資料流量 (80) 公開節點埠
30783。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-external-default LoadBalancer 172.21.84.172 169.xx.xxx.xxx, 169.xx.xxx.xxx 80:30783/TCP,443:30413/TCP 24h -
使用這些 IP 位址及節點埠,建立連接至主機專用網路的第 4 層負載平衡器。 例如,您可以從主機的雲端提供者部署負載平衡器,或將 F5 負載平衡器部署至內部部署網路。 要建立公用路由,負載平衡器必須具有公用網路連線,並且必須能夠將 TCP 和 UDP 流量轉發到您在上一步中找到的公用流量連接埠。 要建立私人路由,負載平衡器必須能夠將 TCP 和 UDP 流量轉發到您在上一步中找到的私人流量連接埠。
-
取得叢集的 主機名稱。
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud格式的這個子網域會向叢集的 Ingress 控制器登錄。ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID> -
將負載平衡器的公用 IP 位址新增至叢集的子網域。 針對您要新增的所有公用 IP 位址,重複此指令。
ibmcloud oc nlb-dns add --ip <public_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname> -
從叢集的子網域中移除工作者節點 IP 位址。 針對您先前擷取的所有 IP 位址,重複此指令。
ibmcloud oc nlb-dns rm classic --ip <private_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname> -
驗證負載平衡器的公用 IP 位址現在已向叢集子網域登錄。
ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID> -
繼續 使用 Red Hat OpenShift 路徑 中的步驟,以建立應用程式的路徑。
如果您配置外部負載平衡器或 VIP 以註冊子網域,而不是使用預設註冊,則該負載平衡器 需要群集主機的入站存取,而群集主機則需要負載平衡器的出站存取。
使用 NodePort 公開應用程式
如果您無法使用 Red Hat OpenShift Ingress 控制器來揭露應用程式,例如您必須揭露 TCP 或 UDP 應用程式,您可以為您的應用程式建立一個 NodePort 應用程式。
-
為您的應用程式建立一個「NodePort」。 在 30000 到 32767 範圍內的 NodePort 及內部叢集 IP 位址已指派給您的應用程式。
oc expose deployment <deployment_name> --type=NodePort --name=<nodeport_svc_name> -
取得已指派給應用程式的 NodePort。
oc describe svc <nodeport_svc_name> -
取得叢集的 主機名稱,格式為
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud。ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID> -
使用叢集的子網域及 NodePort 格式
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud:<nodeport>來存取應用程式。 請注意,如果您的主機僅具有專用網路連線功能,則必須連接至主機的專用網路,例如透過 VPN 存取。 -
選用項目: 如果您不想直接存取 NodePort,或必須在特定埠 (例如 443) 上公開應用程式,則可以設定自己的協力廠商第 4 層負載平衡器 (連接至主機的專用網路),並將資料流量轉遞至 NodePort。 例如,您可以從主機的雲端提供者部署負載平衡器,或將 F5 負載平衡器部署至內部部署網路。 負載平衡器必須能夠轉發 TCP 和 UDP 連接埠
30000 - 32767的流量。
針對來自 IBM Cloud 的資料流量,使用路徑和鏈結端點公開應用程式
若您希望透過私有網路 IBM Cloud 從資源存取叢集 Satellite 內的應用程式,可使用私有入口控制器為該應用程式建立私有路由。 接著,您可以為該路由建立類型為 location 的連結端點,此端點僅限從 私有 IBM Cloud 網路內部存取。
-
遵循 使用 Red Hat OpenShift 路徑來公開應用程式 中的步驟,以建立應用程式的專用路徑。 只能從主機的私密網路內存取此路徑。
-
遵循 建立
location端點以連接至位置中的資源 中的步驟,以建立應用程式專用路徑的 Satellite 鏈結端點。 -
選用項目: 若要只容許從 IBM Cloud中的特定資源存取端點,請 將資源新增至端點的來源清單。