在阿里云Serverless Kubernetes集群中,咱们能够经过LoadBalancer Service对外提供四层服务访问,一样咱们也能够经过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。前端
注释 | 说明 |
---|---|
service.beta.kubernetes.io/alicloud-loadbalancer-id | 指定已存在的SLB ID |
当咱们不指定SLB实例时,系统会在第一个Ingress建立时自动帮咱们生成一个性能保障型的公网SLB实例。node
这里咱们部署一个coffee service和tea service:nginx
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
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复制代码
经过Ingress配置coffee service和tea service对外暴露的域名和Path路径:api
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复制代码
注意:目前咱们须要自行将域名解析到SLB实例IP上
浏览器
3.1 经过浏览器测试访问coffee服务:tomcat
3.2 经过命令行方式测试访问coffee服务:bash
curl -H "Host: foo.bar.com" http://139.224.76.211/coffee复制代码
3.3 经过浏览器测试访问tea服务:app
3.4 经过命令行方式测试访问tea服务:less
curl -H "Host: foo.bar.com" http://139.224.76.211/tea复制代码
咱们能够经过注释service.beta.kubernetes.io/alicloud-loadbalancer-id
来指定使用已存在的SLB实例,但要求该SLB实例必须为性能保障型规格(支持ENI)。curl
注意:系统会自动初始化SLB实例的80和443端口,请确保当前没有其余服务使用
这里咱们部署一个tomcat service:
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
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复制代码
咱们在集群同Region下自行申请一个性能保障型
SLB实例(如slb.s2.small),能够是私网也能够是公网(依据具体需求)。
注意:系统自动依据第一个建立的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复制代码
经过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-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-ingress
NAME HOSTS ADDRESS PORTS AGE
tomcat-ingress bar.foo.com 47.101.20.67 80, 443 1m复制代码
注意:目前咱们须要自行将域名解析到SLB实例IP上
5.1 经过浏览器测试访问tomcat服务:
5.2 经过命令行方式测试访问tomcat服务:
curl -k -H "Host: bar.foo.com" https://47.101.20.67复制代码
本文为云栖社区原创内容,未经容许不得转载