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

暖憶發表於2018-07-17

摘要:
在阿里雲Serverless Kubernetes叢集中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes叢集中提供七層域名服務訪問。

簡介

在阿里雲Serverless Kubernetes叢集中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes叢集中提供七層域名服務訪問。

alb_ingress_arch

使用說明

  1. 不指定SLB例項情況下系統會自動幫您生成一個公網SLB例項。
  2. SLB例項預設前端監聽埠為80(HTTP協議)和443(HTTPS協議)。
  3. SLB例項HTTPS證書預設會初始化為第一個建立的Ingress配置的TLS證書,否則會初始化為系統預設證書;您完全可根據需要自行在SLB控制檯上進行修改。
  4. 當您指定使用已存在的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證書
  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.67複製程式碼

原文連結

本文為雲棲社群原創內容,未經允許不得轉載


相關文章