Kubernetes 入口資源可提供從叢集外部到叢集中一或多個服務的 HTTP 或 HTTPS 路由。TKG 叢集透過第三方控制器 (例如 Nginx) 支援入口。
本教學課程說明如何部署以 NGINX 為基礎的 Kubernetes 入口服務,用於將外部流量路由至 Tanzu Kubernetes 叢集中的服務。入口服務需要入口控制器。我們將使用 Helm 安裝 NGINX 入口控制器。Helm 是 Kubernetes 的套件管理程式。
備註: 有多種方式可完成此工作。此處的步驟提供了一種方法。在指定的環境中,其他方法可能更適合。
必要條件
- 請檢閱 Kubernetes 說明文件中的入口資源。
- 檢閱 Nginx 入口控制器說明文件。
- 佈建 TKG 叢集。
- 如有必要,請啟用網繭安全性原則。
- 連線至 TKG 叢集。
程序
- 透過參考說明文件安裝 Helm。
- 使用 Helm 安裝 NGINX 入口控制器。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
- 確認 Nginx 入口控制器是否已部署為 LoadBalancer 類型的服務。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.16.18.20 10.19.14.76 80:30635/TCP,443:30873/TCP 59m
ingress-nginx-controller-admission ClusterIP 10.87.41.25 <none> 443/TCP 59m
- 使用外部 IP 位址 Ping 負載平衡器。
Pinging 10.19.14.76 with 32 bytes of data:
Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
Reply from 10.19.14.76: bytes=32 time=1ms TTL=62
- 確認 Nginx 入口控制器是否正在執行。
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m
- 使用入口規則和路徑建立名為
ingress-hello.yaml
的入口資源。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-hello
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello
servicePort: 80
- 部署
ingress-hello
資源。
kubectl apply -f ingress-hello.yaml
ingress.networking.k8s.io/ingress-hello created
- 確認入口資源是否已部署。
請注意,IP 位址將對應至入口控制器的外部 IP。
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 51m
- 建立名為 ingress-hello-test.yaml 的 hello 測試應用程式和服務。
kind: Service
apiVersion: v1
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
tier: backend
track: stable
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
- 部署
ingress-hello-test
資源。
kubectl apply -f ingress-hello-test.yaml
service/hello created
deployment.apps/hello created
- 確認
hello
部署是否可用。
NAME READY UP-TO-DATE AVAILABLE AGE
hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m
- 取得 Nginx 入口控制器所使用的負載平衡器的公用 IP 位址。
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 13m
- 使用瀏覽器,導覽至公用 IP,並包含入口路徑。
隨即傳回訊息「hello」。
{"message":"Hello"}
結果
瀏覽器使用負載平衡器的外部 IP 位址透過入口控制器從外部存取由叢集內執行的服務所面向的後端應用程式。