摘要:?在阿里云Serverless Kubernetes集群中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes集群中提供七層域名服務訪問。
簡介
在阿里云Serverless Kubernetes集群中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress來對外提供七層服務訪問,今天主要分享下如何在Serverless Kubernetes集群中提供七層域名服務訪問。
使用說明
不指定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服務:
3.2 通過命令行方式測試訪問coffee服務:
curl?-H?"Host:?foo.bar.com"?http://139.224.76.211/coffee
3.3 通過瀏覽器測試訪問tea服務:
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服務:
5.2 通過命令行方式測試訪問tomcat服務:
curl?-k?-H?"Host:?bar.foo.com"?https://47.101.20.67
本文為云棲社區原創內容,未經允許不得轉載
評論
查看更多