设为首页 收藏本站
查看: 903|回复: 0

[经验分享] 阿里云Serverless Kubernetes通过Ingress提供7层服务访问

[复制链接]
发表于 2018-9-15 11:58:38 | 显示全部楼层 |阅读模式
  摘要: 在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。
  简介
  在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。
  alb_ingress_arch
  使用说明
  不指定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>  部署示例
  a. 使用默认生成的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
          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                  80/TCP    1m
          svc/tea-svc      ClusterIP                  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上


  3.1 通过浏览器测试访问coffee服务:
  image
  3.2 通过命令行方式测试访问coffee服务:
  curl -H "Host: foo.bar.com" http://139.224.76.211/coffee
  3.3 通过浏览器测试访问tea服务:
  image
  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/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                  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),可以是私网也可以是公网(依据具体需求)。
  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.crt
  secret "cert-example" created

查看新建TLS证书
  alb 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>  

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
        5、测试服务访问
        注意:目前我们需要自行将域名解析到SLB实例IP上


  5.1 通过浏览器测试访问tomcat服务:
  image
  5.2 通过命令行方式测试访问tomcat服务:
  curl -k -H "Host: bar.foo.com" https://47.101.20.67curl -k -H "Host: bar.foo.com" https://47.101.20.67



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-583448-1-1.html 上篇帖子: 深入解析 kubernetes 资源管理,容器云牛人有话说 下篇帖子: Kubernetes网络
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表