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

摘要: 在阿里雲Serverless Kubernetes集羣中,咱們能夠經過LoadBalancer Service對外提供四層服務訪問,一樣咱們也能夠經過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes集羣中提供七層域名服務訪問。前端


簡介

在阿里雲Serverless Kubernetes集羣中,咱們能夠經過LoadBalancer Service對外提供四層服務訪問,一樣咱們也能夠經過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes集羣中提供七層域名服務訪問。node

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實例。nginx

一、部署測試服務

這裏咱們部署一個coffee service和tea service:api

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複製代碼
二、配置 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複製代碼
三、測試服務訪問

注意:目前咱們須要自行將域名解析到SLB實例IP上tomcat

3.1 經過瀏覽器測試訪問coffee服務:
imagebash

3.2 經過命令行方式測試訪問coffee服務:app

curl -H "Host: foo.bar.com" http://139.224.76.211/coffee複製代碼

3.3 經過瀏覽器測試訪問tea服務:
imageless

3.4 經過命令行方式測試訪問tea服務:curl

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端口,請確保當前沒有其餘服務使用

一、部署測試服務

這裏咱們部署一個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複製代碼
二、申請SLB實例

咱們在集羣同Region下自行申請一個性能保障型SLB實例(如slb.s2.small),能夠是私網也能夠是公網(依據具體需求)。

三、配置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複製代碼
四、配置 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複製代碼
五、測試服務訪問

注意:目前咱們須要自行將域名解析到SLB實例IP上

5.1 經過瀏覽器測試訪問tomcat服務:
image

5.2 經過命令行方式測試訪問tomcat服務:

curl -k -H "Host: bar.foo.com" https://47.101.20.67複製代碼

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載!

相關文章
相關標籤/搜索