开发者社区 > 云原生 > Serverless > 正文

Serverless Kubernetes 集群  负载均衡管理  通过Ingress提供7层服务访问


在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样您也可以通过Ingress来对外提供七层服务访问,下面介绍如何在Serverless Kubernetes集群中提供七层域名服务访问。

前提条件


  • 您已创建一个serverless集群,集群的VPC需要配置NAT网关,从而访问外网,下载容器镜像。
  • 您已通过kubectl连接到集群,参见通过 kubectl 连接 Kubernetes 集群


使用说明


  1. 不指定SLB实例情况下系统会自动帮您生成一个公网SLB实例。
  2. SLB实例默认前端监听端口为80(HTTP协议)和443(HTTPS协议)。
  3. SLB实例HTTPS证书默认会初始化为第一个创建的Ingress配置的TLS证书,否则会初始化为系统默认证书;您可根据需要自行在SLB控制台上进行修改。
  4. 当您指定使用已存在的SLB实例时,要求该SLB实例规格必须是性能保障型(支持ENI);同时确保80和443端口当前没有其他服务使用。


注释说明

[tr=rgb(51, 205, 229)][td]注释 说明service.beta.kubernetes.io/alicloud-loadbalancer-id指定已存在的SLB ID

使用默认生成的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: None$ kubectl apply -f cafe-service.yaml                   #在cafe-service.yaml文件中输入上面的模板deployment "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: 80$ kubectl 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、测试服务访问
[tr=transparent] [/url]说明[tr=transparent]目前我们需要自行将域名解析到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)。

1、 部署测试服务首先部署一个tomcat测试应用,编排模板如下: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: None$ kubectl apply -f tomcat-service.yml                 #在tomcat-service.yaml中输入上面的模板deployment "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           1m2、申请SLB实例您需要在集群同Region下自行申请一个 性能保障型SLB实例(如slb.s2.small),可以是私网也可以是公网(依据具体需求)。本例中申请一个公网SLB实例,记录SLB实例的ID。3、配置TLS证书您需要配置TLS证书实现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/v1beta1kind: Ingressmetadata:  name: tomcat-ingress  annotations:# 配置使用指定的SLB实例(SLB ID)service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxx            ##替换为你的SLB IDspec:  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-ingressNAME             HOSTS         ADDRESS        PORTS     AGEtomcat-ingress   bar.foo.com   47.101.20.67   80, 443   1m5、测试服务访问本例中在 hosts中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。47.101.20.67   bar.foo.com通过浏览器测试访问tomcat服务
通过命令行方式测试访问tomcat服务:curl -k -H "Host: bar.foo.com" [url]https://47.101.20.67

展开
收起
青蛙跳 2018-08-31 22:39:43 1525 0
0 条回答
写回答
取消 提交回答

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    ACK 云原生弹性方案—云原生时代的加速器 立即下载
    ACK集群类型选择最佳实践 立即下载
    企业运维之云原生和Kubernetes 实战 立即下载

    相关镜像