在阿里雲Serverless Kubernetes叢集中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣您也可以通過Ingress來對外提供七層服務訪問,下面介紹如何在Serverless Kubernetes叢集中提供七層網域名稱服務 (DNS)訪問。
前提條件
- 您已建立一個serverless叢集,叢集的VPC需要配置NAT Gateway,從而訪問外網,下載容器鏡像。
- 您已通過kubectl串連到叢集,參見通過 kubectl 串連 Kubernetes 叢集。
使用說明
- 不指定SLB執行個體情況下系統會自動幫您產生一個公網SLB執行個體。
- SLB執行個體預設前端監聽連接埠為80(HTTP協議)和443(HTTPS協議)。
- SLB執行個體HTTPS認證預設會初始化為第一個建立的Ingress配置的TLS認證,否則會初始化為系統預設認證;您可根據需要自行在SLB控制台上進行修改。
- 當您指定使用已存在的SLB執行個體時,要求該SLB執行個體規格必須是效能保障型(支援ENI);同時確保80和443連接埠當前沒有其他服務使用。
注釋說明
注釋 | 說明 |
---|---|
service.beta.kubernetes.io/alicloud-loadbalancer-id | 指定已存在的SLB ID |
使用預設產生的SLB執行個體
當您不指定SLB執行個體時,系統會在第一個Ingress建立時自動產生一個效能保障型的公網SLB執行個體。
1、 部署測試服務
首先部署一個coffee service和tea service,編排模板如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: coffee
spec:
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: v1
kind: Service
metadata:
name: coffee-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: coffee
clusterIP: None
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tea
spec:
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: v1
kind: Service
metadata:
name: tea-svc
labels:
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: tea
clusterIP: None
$ kubectl apply -f cafe-service.yaml #在cafe-service.yaml檔案中輸入上面的模板
deployment "coffee" created
service "coffee-svc" created
deployment "tea" created
service "tea-svc" created
# 部署完成後
$ kubectl get svc,deploy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/coffee-svc ClusterIP <none> <none> 80/TCP 1m
svc/tea-svc ClusterIP <none> <none> 80/TCP 1m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/coffee 2 2 2 2 1m
deploy/tea 1 1 1 1 1m
2、配置 Ingress
通過Ingress配置coffee service和tea service對外暴露的網域名稱和Path路徑:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
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: 80
$ kubectl apply -f cafe-ingress.yaml
ingress "cafe-ingress" created
# 部署完成後,ADDRESS為自動產生的SLB執行個體IP
$ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
cafe-ingress foo.bar.com 139.224.76.211 80 1m
3、測試服務訪問
说明 目前我們需要自行將網域名稱解析到SLB執行個體IP上
本例中在
hosts中添加一條DNS網域名稱解析規則,用於測試服務訪問。建議您在工作環境中對網域名稱進行備案。
139.224.76.211 foo.bar.com
通過瀏覽器測試訪問coffee服務。

通過命令列方式測試訪問coffee服務。
curl -H "Host: foo.bar.com" http://139.224.76.211/coffee
通過瀏覽器測試訪問tea服務。

通過命令列方式測試訪問tea服務。
curl -H "Host: foo.bar.com" http://139.224.76.211/tea
使用指定的SLB執行個體
我們可以通過注釋
service.beta.kubernetes.io/alicloud-loadbalancer-id
來指定使用已存在的SLB執行個體,但要求該SLB執行個體必須為效能保障型規格(支援ENI)。
说明 系統會自動初始化SLB執行個體的80和443連接埠,請確保當前沒有其他服務使用。
1、 部署測試服務
首先部署一個tomcat測試應用,編排模板如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat
spec:
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: v1
kind: Service
metadata:
name: tomcat
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
run: tomcat
clusterIP: None
$ kubectl apply -f tomcat-service.yml #在tomcat-service.yaml中輸入上面的模板
deployment "tomcat" created
service "tomcat" created
# 部署完成後
$ kubectl get svc,deploy tomcat
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/tomcat ClusterIP <none> <none> 8080/TCP 1m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/tomcat 1 1 1 1 1m
2、申請SLB執行個體
您需要在叢集同Region下自行申請一個
效能保障型SLB執行個體(如slb.s2.small),可以是私網也可以是公網(依據具體需求)。本例中申請一個公網SLB執行個體,記錄SLB執行個體的ID。

3、配置TLS認證
您需要配置TLS認證實現HTTPS訪問。
说明 系統自動依據第一個建立的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.crt
secret "cert-example" created
# 查看建立TLS認證
$ kubectl get secret cert-example
NAME TYPE DATA AGE
cert-example kubernetes.io/tls 2 12s
4、配置 Ingress
通過Ingress配置tomcat service對外暴露的網域名稱和Path路徑,編排模板如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat-ingress
annotations:
# 配置使用指定的SLB執行個體(SLB ID)
service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxx ##替換為你的SLB ID
spec:
tls:
- hosts:
- bar.foo.com
# 配置TLS認證
secretName: cert-example
rules:
# 配置七層網域名稱
- host: bar.foo.com
http:
paths:
# 配置Context Path
- path: /
backend:
serviceName: tomcat
servicePort: 8080
$ kubectl apply -f tomcat-ingress.yml #在tomcat-ingress.yaml中輸入上面的模板
ingress "tomcat-ingress" created
# 部署完成後,ADDRESS為指定的SLB IP地址
$ kubectl get ing tomcat-ingress
NAME HOSTS ADDRESS PORTS AGE
tomcat-ingress bar.foo.com 47.101.20.67 80, 443 1m
5、測試服務訪問
说明 目前我們需要自行將網域名稱解析到SLB執行個體IP上。
本例中在
hosts中添加一條DNS網域名稱解析規則,用於測試服務訪問。建議您在工作環境中對網域名稱進行備案。
47.101.20.67 bar.foo.com
通過瀏覽器測試訪問tomcat服務:

通過命令列方式測試訪問tomcat服務:
curl -k -H "Host: bar.foo.com" https://47.101.20.67