摘要: 在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。
简介
在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless 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部署示例a. 使用默认生成的SLB实例
当我们不指定SLB实例时,系统会在第一个Ingress创建时自动帮我们生成一个性能保障型的公网SLB实例。
1、部署测试服务
这里我们部署一个coffee service和tea service:
apiVersion: extensions/v1beta1
kind: Deploymentmetadata: name: coffeespec: replicas: 2 selector:matchLabels: app: coffee
template:
metadata: labels: app: coffeespec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80
apiVersion: v1
kind: Servicemetadata: name: coffee-svcspec: ports:- port: 80 targetPort: 80 protocol: TCP
selector:
app: coffee
clusterIP: None
apiVersion: extensions/v1beta1
kind: 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: v1
kind: Servicemetadata: name: tea-svc labels:spec: ports:- port: 80 targetPort: 80 protocol: TCP
selector:
app: tea
clusterIP: None
kubectl 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 AGE
deploy/coffee 2 2 2 2 1mdeploy/tea 1 1 1 1 1m2、配置 Ingress通过Ingress配置coffee service和tea service对外暴露的域名和Path路径:
apiVersion: extensions/v1beta1
kind: 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: 80
kubectl apply -f cafe-ingress.yaml
ingress "cafe-ingress" created # 部署完成后,ADDRESS为自动生成的SLB实例IP kubectl get ingNAME HOSTS ADDRESS PORTS AGEcafe-ingress foo.bar.com 139.224.76.211 80 1m3、测试服务访问注意:目前我们需要自行将域名解析到SLB实例IP上
3.1 通过浏览器测试访问coffee服务:
3.2 通过命令行方式测试访问coffee服务:
curl -H "Host: foo.bar.com"
3.3 通过浏览器测试访问tea服务:
3.4 通过命令行方式测试访问tea服务:
curl -H "Host: foo.bar.com"
b. 使用指定的SLB实例我们可以通过注释service.beta.kubernetes.io/alicloud-loadbalancer-id来指定使用已存在的SLB实例,但要求该SLB实例必须为性能保障型规格(支持ENI)。
注意:系统会自动初始化SLB实例的80和443端口,请确保当前没有其他服务使用
1、部署测试服务
这里我们部署一个tomcat service:
apiVersion: extensions/v1beta1
kind: Deploymentmetadata: name: tomcatspec: replicas: 1 selector:matchLabels: run: tomcat
template:
metadata: labels: run: tomcatspec: containers: - image: tomcat:7.0 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 protocol: TCP restartPolicy: Always
apiVersion: v1
kind: Servicemetadata: name: tomcatspec: ports:- port: 8080 protocol: TCP targetPort: 8080
selector:
run: tomcat
clusterIP: None
kubectl 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 AGE
deploy/tomcat 1 1 1 1 1m2、申请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证书 kubectl get secret cert-exampleNAME TYPE DATA AGEcert-example kubernetes.io/tls 2 12s4、配置 Ingress通过Ingress配置tomcat service对外暴露的域名和Path路径:
apiVersion: extensions/v1beta1
kind: Ingressmetadata: name: tomcat-ingress annotations:# 配置使用指定的SLB实例(SLB ID)service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-uf6y73uq40u9oz1q8snxc
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
ingress "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 1m5、测试服务访问注意:目前我们需要自行将域名解析到SLB实例IP上
5.1 通过浏览器测试访问tomcat服务:
5.2 通过命令行方式测试访问tomcat服务:
curl -k -H "Host: bar.foo.com"
本文为云栖社区原创内容,未经允许不得转载