如何访问部署在kubernetes平台上的应用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 用户在使用阿里云容器服务kubernetes的时候经常遇到需要访问部署在容器服务平台上的应用的场景。无论是在kubernetes集群内部访问应用,还是通过外部进行应用的访问,用户都会遇到些问题,本文主要是对用户在访问kubernetes平台上的应用时遇到的普遍问题进行解决方案的总结。

用户在使用阿里云容器服务kubernetes的时候经常遇到需要访问部署在容器服务平台上的应用的场景。无论是在kubernetes集群内部访问应用,还是通过外部进行应用的访问,用户都会遇到些问题,本文主要是对用户在访问kubernetes平台上的应用时遇到的普遍问题进行解决方案的总结。

基础内容普及

应用对外暴露访问的方式

前提:

应用部署类型选择deployment;然后为该deployment创建service;

方式一 创建service

       service有三种类型,ClusterIP,NodePort和LoadBalancer类型;对应阿里云上分别为虚拟集群IP,节点端口和负载均衡;在容器服务控制台创建服务的时候可以进行类型的选择。具体创建service可以参考阿里云文档创建服务

db3e1581bf46befc4c7d0a86d50f19f877448346

方式二 创建路由

在创建了service的基础上,在阿里云上可以利用路由功能绑定service,通过域名的方式进行内部应用的暴露。

域名可以使用容器服务平台自带的域名, 容器服务平台负责解析;也可以使用用户自己的域名,但是该域名需要用户自行解析,比如通过用户自己的DNS。

具体创建路由可以参考阿里云文档通过web界面创建路由

80e06fd883cfbca81e95def27e27758d0d12cd95

区别

    方式一:

    1、对外部应用暴露service最终还是通过IP:port的方式对容器服务平台内部应用进行访问;

    2、对集群内部的应用来说,可以通过service名称来进行服务的访问。

 

    方式二:通过域名的方式进行服务的暴露。

场景一 通过NodePort类型的service进行服务的访问

写在前面:

       不建议用在生产环境,以下两种方案的宗旨在于深入理解该类型以及与其他相关云产品的关联。

原理:

       NodePort类型的service顾名思义就是kubernetes在创建这样类型的service的时候会在集群中的每一个节点(master和worker)上开通一个port,任何转发到任一节点上该端口的请求都会被转发到对应的服务上,最后转发到服务所对应的应用上。

注:NodePort端口默认范围为30000-32767。

2bea05727c1ddecc8cbe14b55be86d5899733704

方案一 利用master节点

       阿里云kubernetes集群master节点通过SLB进行了访问连接,以便于用户登录集群进行操作。借助该SLB并结合NodePort类型的service,我们可以将SLB_IP:nodeport的方式进行服务的对外暴露。

0802524b498f7e2ad42e040b19b870d58717de9d

    优点:

           可以快速的通过SLB访问到应用。

    缺点:

           由于使用到了master节点的SLB,所以会增大master节点的流量负担,适用于临时测试。

方案二 利用worker节点

由于worker节点当前没有对外暴露,所以需要通过SLB将worker节点暴露出去。

      第一步,首先我们需要手动创建一个SLB实例;

      第二步,将集群中的worker节点挂在该SLB实例下面;也可以挂一部分,但是要保证这些node节点不会被删除掉。

      第三步,通过访问SLB_IP:nodeport的方式进行服务的对外暴露;

366eea13dd8f5c6950940567ce79e3c31ed5a9c3

    优点:

            SLB的流量仅通过worker节点,不会影响master节点;

    缺点:

            1、需要用户自己配置SLB并且没开通一个端口都需要开通。

       2、需要注意不要删除掉挂载在SLB下的worker节点。

 

    注:

     负载均衡相关内容请参考创建负载均衡实例配置负载均衡实例

 

场景二 通过LoadBalancer类型的service进行服务的访问

前提

在创建service的时候选择负载均衡->公网访问的类型。(如果本地环境能跟线上VPC打通的话,也可以选择负载均衡->内网访问的类型)。

方案及原理

在阿里云容器服务kubernetes上创建LoadBalancer类型的service会做两件事情:

首先,为应用创建一个NodePort(通NodePort类型的service);

其次,自动创建阿里云SLB服务;

最后,自动设置SLB前端监听端口和后端监听端口;前端监听端口为服务端口,后端监听端口为NodePort的端口。

通过上面的操作,服务就通过SLB暴露出去了。访问应用时只需要访问SLB_IP:service_port就可以了。

 

     优点:

      暴露服务简洁明了,自动化配置SLB,通过SLB IP:service_port即可访问应用。

     缺点:

           每个服务都独占一个SLB,如果需要暴露的服务量太大的话,会占用较多的SLB资源。

场景三 通过域名进行服务的访问

原理

阿里云容器服务提供路由功能,可使用默认域名和自定义域名,路由具体原理为kubernetes中的ingress(nginx),通过将service对应的IP地址刷新到nginx的upstream并配置相应的域名即可实现基于域名的应用访问。

方案

阿里云容器服务kubernetes上创建路由,填入使用默认后缀域名或者自定义域名(自定义域名需要用户解析),选择绑定的服务后点击创建即可完成了路由的创建。在路由界面选取域名进行应用的访问。同时可以通过设置访问PATH来区分访问到的服务。

多个路由后端设置

在kubernetes上使用路由功能创建出的路由,不论在哪个namespace下面都是显示的同一个端点IP,这是因为在路由对应的ingress前端只有一个SLB,该端点IP即为该SLB的IP地址。

1434e67d4d78572dda059e84e047ba7497911ac8

如上图所示,如果需要多个路由后端,需要用户做两件事情:

1、         在kube-system为nginx-ingress-controller创建多个LB类型的service;此时会有多个service对应nginx-ingress-controller这个deployment,同时也会有多个SLB(无论公网还是内网类型)指向nginx-ingress-controller这个deployment;

2、         在创建路由时,选择自定义域名方式进行创建,不同的域名在DNS上对应不同的SLB后端;提前做好service对应域名的规划很重要。

比如在第一步我们创建了三个SLB,分别为10.10.10.10、11.11.11.11和12.12.12.12;在创建路由时创建了三个自定义域名,分别为red.selfdefine.com、yellow.selfdefine.com和blue.selfdefine.com;并且我们分别在DNS中将上面的三组分别对应解析,比如red.selfdefine.com解析到10.10.10.10上,以此类推;那么最后通过域名进行应用访问的时候,会访问到不通的SLB后端。

说明:

此时有的用户应该在界面上注意到了,无论哪种域名在界面上显示的端点都是一个,这个是当前界面上路由只支持一个SLB的问题,但是并不会对添加多个SLB后端的功能产生问题。

总结

    建议在测试环境可以使用NodePort的service;

    建议在生产环境使用LoadBalancer类型的service;

    集群内部应用间的访问可以直接使用service的clusterip即可;

      

 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
27天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
29天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
12天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
13天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
25 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
11天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
53 17
|
23天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
98 0
|
24天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
17 0
|
27天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
20 1
|
1月前
|
Kubernetes Java Nacos
nacos常见问题之k8s上部署需要自动扩缩容如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
33 0
|
1月前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多