Kubernetes 入口資源可提供從叢集外部到叢集中一或多個服務的 HTTP 或 HTTPS 路由。TKG 叢集透過第三方控制器 (例如 Contour) 支援入口。
此教學課程說明如何部署將外部流量路由至 TKG 叢集中服務的 Contour 入口控制器。Contour 是 VMware 參與的開放原始碼專案。
必要條件
程序
- 建立 ClusterRoleBinding,以允許服務帳戶管理叢集的所有資源。
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
- 建立名為
projectcontour
的命名空間。這是 Contour 入口控制器部署的預設命名空間。kubectl create ns projectcontour
- 下載最新的 Contour 入口控制器 YAML:Contour 入口部署。
- 使用文字編輯器開啟 contour.yaml 檔案。
- 透過在每行前面加上
#
符號,註解以下兩行標記:第 1632 行:# service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
第 1634 行:# externalTrafficPolicy: Local
- 透過套用
contour.yaml
檔案來部署 Contour。kubectl apply -f contour.yaml
- 確認 Contour 入口控制器和 Envoy 負載平衡器服務是否已部署。
kubectl get services -n projectcontour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE contour ClusterIP 198.63.146.166 <none> 8001/TCP 120m envoy LoadBalancer 198.48.52.47 192.168.123.5 80:30501/TCP,443:30173/TCP 120m
- 確認 Contour 和 Envoy 網繭正在執行。
kubectl get pods -n projectcontour
NAME READY STATUS RESTARTS AGE contour-7966d6cdbf-skqfl 1/1 Running 1 21h contour-7966d6cdbf-vc8c7 1/1 Running 1 21h contour-certgen-77m2n 0/1 Completed 0 21h envoy-fsltp 1/1 Running 0 20h
- 使用外部 IP 位址 Ping 負載平衡器。
ping 192.168.123.5
PING 192.168.123.5 (192.168.123.5) 56(84) bytes of data. 64 bytes from 192.168.123.5: icmp_seq=1 ttl=62 time=3.50 ms
- 建立名為 ingress-nihao.yaml 的入口資源。
建立 YAML。
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-nihao spec: rules: - http: paths: - path: /nihao backend: serviceName: nihao servicePort: 80
套用 YAML。kubectl apply -f ingress-nihao.yaml
確認入口資源是否已建立。kubectl get ingress
Envoy LoadBalancer 的外部 IP 位址 (在此範例中為192.168.123.5
) 由入口物件使用。NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 192.168.123.5 80 17s
- 使用後端應用程式部署測試服務。
建立以下名為 ingress-nihao-test.yaml 的 YAML 檔案
kind: Service apiVersion: v1 metadata: name: nihao spec: selector: app: nihao tier: backend ports: - protocol: TCP port: 80 targetPort: http --- apiVersion: apps/v1 kind: Deployment metadata: name: nihao spec: replicas: 3 selector: matchLabels: app: nihao tier: backend track: stable template: metadata: labels: app: nihao tier: backend track: stable spec: containers: - name: nihao image: "gcr.io/google-samples/hello-go-gke:1.0" ports: - name: http containerPort: 80
套用 YAML。kubectl apply -f ingress-nihao-test.yaml
確認nihao
服務是否已建立。kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nihao ClusterIP 10.14.21.22 <none> 80/TCP 15s
確認後端部署是否已建立。kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE nihao 3/3 3 3 2m25s
確認後端網繭是否存在。kubectl get pods
NAME READY STATUS RESTARTS AGE nihao-8646584495-9nm8x 1/1 Running 0 106s nihao-8646584495-vscm5 1/1 Running 0 106s nihao-8646584495-zcsdq 1/1 Running 0 106s
- 取得 Contour 入口控制器所使用的負載平衡器的公用 IP 位址。
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 10.19.14.76 80 13m
- 使用瀏覽器,導覽至公用 IP,並包含入口路徑。
http://10.19.14.76/nihao
隨即傳回訊息「hello」。{"message":"Hello"}