阿里云Serverless Kubernetes通过Ingress提供7层服务访问

摘要: 在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。

简介

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


阿里云Serverless Kubernetes通过Ingress提供7层服务访问_第1张图片

使用说明

不指定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: 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服务:


阿里云Serverless Kubernetes通过Ingress提供7层服务访问_第2张图片

3.2 通过命令行方式测试访问coffee服务:

curl -H "Host: foo.bar.com" http://139.224.76.211/coffee

3.3 通过浏览器测试访问tea服务:


阿里云Serverless Kubernetes通过Ingress提供7层服务访问_第3张图片

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证书

  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-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服务:


阿里云Serverless Kubernetes通过Ingress提供7层服务访问_第4张图片

5.2 通过命令行方式测试访问tomcat服务:

curl -k -H "Host: bar.foo.com" https://47.101.20.67

原文链接

本文为云栖社区原创内容,未经允许不得转载

你可能感兴趣的:(阿里云Serverless Kubernetes通过Ingress提供7层服务访问)