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

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 在阿里云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协议);健康检查路径是根路径(/),请确保后端服务能正常提供访问(响应码为2xx或3xx)。
  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
AI 代码解读
  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
AI 代码解读
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
AI 代码解读
  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
AI 代码解读
3、测试服务访问

注意:目前我们需要自行将域名解析到SLB实例IP上

3.1 通过浏览器测试访问coffee服务:
image

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

curl -H "Host: foo.bar.com" http://139.224.76.211/coffee
AI 代码解读

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

3.4 通过命令行方式测试访问tea服务:

curl -H "Host: foo.bar.com" http://139.224.76.211/tea
AI 代码解读

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
AI 代码解读
  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
AI 代码解读
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
AI 代码解读
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
AI 代码解读
  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
AI 代码解读
5、测试服务访问

注意:目前我们需要自行将域名解析到SLB实例IP上

5.1 通过浏览器测试访问tomcat服务:
image

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

curl -k -H "Host: bar.foo.com" https://47.101.20.67
AI 代码解读
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
1
0
0
78391
分享
相关文章
突破地域限制,实现算力无限供给 -- 阿里云ACK One注册集群开启多地域Serverless算力调度
传统单地域算力难以支撑AI推理场景的高并发实时响应、突发高流量的要求,阿里云容器服务ACK One注册集群推出多地域Serverless算力调度方案完美解决此问题。
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
37 10
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless MCP 运行时业界首发,函数计算支持阿里云百炼 MCP 服务!阿里云百炼发布业界首个全生命周期 MCP 服务,无需用户管理资源、开发部署、工程运维等工作,5 分钟即可快速搭建一个连接 MCP 服务的 Agent(智能体)。作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力。
 Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless + AI 让应用开发更简单,加速应用智能化
Serverless + AI 让应用开发更简单,加速应用智能化
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
196 15

相关产品

  • 函数计算