阿里雲Serverless Kubernetes通過Ingress提供7層服務訪問

摘要: 在阿里雲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 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 <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
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 <none> <none> 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 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服務:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章