阿里雲Serverless Kubernetes通過Ingress提供7層服務訪問

阿里雲Serverless Kubernetes通過Ingress提供7層服務訪問

簡介

在阿里雲Serverless Kubernetes集群中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes集群中提供七層域名服務訪問。

使用說明

  1. 不指定SLB實例情況下系統會自動幫您生成一個公網SLB實例。
  2. SLB實例默認前端監聽埠為80(HTTP協議)和443(HTTPS協議)。
  3. SLB實例HTTPS證書默認會初始化為第一個創建的Ingress配置的TLS證書,否則會初始化為系統默認證書;您完全可根據需要自行在SLB控制台上進行修改。
  4. 當您指定使用已存在的SLB實例時,要求該SLB實例規格必須是性能保障型(支持ENI);同時確保80和443埠當前沒有其他服務使用。

注釋說明

注釋說明service.beta.kubernetes.io指定已存在的SLB ID

部署示例

a. 使用默認生成的SLB實例

當我們不指定SLB實例時,系統會在第一個Ingress創建時自動幫我們生成一個性能保障型的公網SLB實例。

1、部署測試服務

這裡我們部署一個coffee service和tea service:

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: coffeespec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: name: coffee-svcspec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee clusterIP: None---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: teaspec: replicas: 1 selector: matchLabels: app: tea template: metadata: labels: app: tea spec: containers: - name: tea image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: name: tea-svc labels:spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: tea clusterIP: Nonekubectl apply -f cafe-service.yamldeployment "coffee" createdservice "coffee-svc" createddeployment "tea" createdservice "tea-svc" created # 部署完成後 kubectl get svc,deployNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/coffee-svc ClusterIP <none> <none> 80/TCP 1msvc/tea-svc ClusterIP <none> <none> 80/TCP 1mNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEdeploy/coffee 2 2 2 2 1mdeploy/tea 1 1 1 1 1m

2、配置 Ingress

通過Ingress配置coffee service和tea service對外暴露的域名和Path路徑:

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: cafe-ingressspec: rules: # 配置七層域名 - host: foo.bar.com http: paths: # 配置Context Path - path: /tea backend: serviceName: tea-svc servicePort: 80 # 配置Context Path - path: /coffee backend: serviceName: coffee-svc servicePort: 80kubectl apply -f cafe-ingress.yamlingress "cafe-ingress" created # 部署完成後,ADDRESS為自動生成的SLB實例IP kubectl get ingNAME HOSTS ADDRESS PORTS AGEcafe-ingress foo.bar.com 139.224.76.211 80 1m

3、測試服務訪問

注意:目前我們需要自行將域名解析到SLB實例IP上

3.1 通過瀏覽器測試訪問coffee服務:

3.2 通過命令行方式測試訪問coffee服務:

curl -H "Host: foo.bar.com" http://139.224.76.211/coffee

3.3 通過瀏覽器測試訪問tea服務:

3.4 通過命令行方式測試訪問tea服務:

curl -H "Host: foo.bar.com" http://139.224.76.211/tea

b. 使用指定的SLB實例

我們可以通過注釋service.beta.kubernetes.io/alicloud-loadbalancer-id來指定使用已存在的SLB實例,但要求該SLB實例必須為性能保障型規格(支持ENI)。

注意:系統會自動初始化SLB實例的80和443埠,請確保當前沒有其他服務使用

1、部署測試服務

這裡我們部署一個tomcat service:

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: tomcatspec: replicas: 1 selector: matchLabels: run: tomcat template: metadata: labels: run: tomcat spec: containers: - image: tomcat:7.0 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 protocol: TCP restartPolicy: Always---apiVersion: v1kind: Servicemetadata: name: tomcatspec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: run: tomcat clusterIP: Nonekubectl apply -f tomcat-service.ymldeployment "tomcat" createdservice "tomcat" created # 部署完成後 kubectl get svc,deploy tomcatNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/tomcat ClusterIP <none> <none> 8080/TCP 1mNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEdeploy/tomcat 1 1 1 1 1m

2、申請SLB實例

我們在集群同Region下自行申請一個性能保障型SLB實例(如slb.s2.small),可以是私網也可以是公網(依據具體需求)。

3、配置TLS證書

注意:系統自動依據第一個創建的Ingress的TLS證書來初始化SLB的HTTPS默認證書,若需要修改HTTPS默認證書,可在SLB控制台自行修改;若需配置多個證書,可在SLB控制台HTTPS監聽擴展域名下自行添加

# 生成測試TLS證書 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=bar.foo.com/O=bar.foo.com" # 創建TLS證書Secret kubectl create secret tls cert-example --key tls.key --cert tls.crtsecret "cert-example" created # 查看新建TLS證書 alb kubectl get secret cert-exampleNAME TYPE DATA AGEcert-example kubernetes.io/tls 2 12s

4、配置 Ingress

通過Ingress配置tomcat service對外暴露的域名和Path路徑:

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: tomcat-ingress annotations: # 配置使用指定的SLB實例(SLB ID) service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-uf6y73uq40u9oz1q8snxcspec: tls: - hosts: - bar.foo.com # 配置TLS證書 secretName: cert-example rules: # 配置七層域名 - host: bar.foo.com http: paths: # 配置Context Path - path: / backend: serviceName: tomcat servicePort: 8080kubectl apply -f tomcat-ingress.ymlingress "tomcat-ingress" created # 部署完成後,ADDRESS為指定的SLB IP地址 kubectl get ing tomcat-ingressNAME HOSTS ADDRESS PORTS AGEtomcat-ingress bar.foo.com 47.101.20.67 80, 443 1m

5、測試服務訪問

注意:目前我們需要自行將域名解析到SLB實例IP上

5.1 通過瀏覽器測試訪問tomcat服務:

>>>>閱讀全文


推薦閱讀:

支持物聯網設備快速上雲,阿里宣布AliOS Things正式開源!
微軟亞馬遜昂首走進來,阿里雲挺胸邁出去
王寶強離婚成了誰的狂歡?—通過阿里雲·數加嚴肅解讀數據背後的媒體傳播路徑
再次升級!阿里雲Kubernetes日誌解決方案

TAG:阿里雲 | 雲計算 | 雲服務 |