通过Service访问应用 (2)

640?wx_fmt=gif

目录  

  • 通过NodePort Service在外部访问集群应用 

  • 通过LoadBalancer Service在外部访问集群应用 

  • Microsoft SQL Server数据库部署 

为了便于理解和学习,请先阅读上一篇《通过Service访问应用 (1)》再继续学习本篇内容。

通过NodePort Service在外部访问集群应用

这时候我们就可以使用NodePort类型的Service了。NodePort服务类型允许在每个节点的IP(任意节点IP)上使用静态端口(NodePort)公开服务,我们可以在集群之外通过请求<NodeIP>:<NodePort>来访问服务。

YAML定义如下所示:

kind: Service #资源类型	
apiVersion: v1	
metadata: #标准元数据	name: nodeport-service  #服务名称	
spec:  #规范定义	type: NodePort #服务类型,这里是节点端口	ports:  #端口列表	- port: 80  #当前端口	nodePort: 31001 #节点端口,注意默认的端口范围为“30000-32767”,注意不要冲突	selector: #标签选择器	app: demo

接下来,我们来执行Service的创建并查询Service:

kubectl create -f nodePortService.yaml	
kubectl get services nodeport-service

640

如上图所示,我们创建了名为“nodeport-service”的Service,该Service映射“31001”节点端口,并且创建了“11.3.138.104”的集群IP,也就是说,Service可以通过“节点IP:节点端口”或“集群IP(spec.clusterIp):端口”进行访问。

接下来,在集群外部的计算机,我们通过节点IP和节点端口(172.16.2.201:31001)即可访问刚刚部署的Demo应用:

640

虽然我们可以在外部访问集群中的应用,但是也可以看到该方案有不少不足:

  • 每个端口仅能支持一个服务,不能冲突

  • 端口范围必须为“30000-32767”,非常不友好

  • 如果节点IP发生变化,服务也将无法访问

因此,用于开发测试还说得过去,用于生产的话,会影响“升职加薪赢取白富美”!我们得寻求更佳方案。

通过LoadBalancer Service在外部访问集群应用

LoadBalancer Service是暴露服务到外部(Internet)的标准方式,它可以完美的解决我们上面的问题,不过使用之前,我们得有一个loadBalancerIP——负载均衡IP。一般的云厂商都能够提供这个服务。这里我们以腾讯云为例进行讲解。

首先,我们需要在腾讯云的k8s集群创建一个Demo Deployment,配置参考上文。

接下来,我们需要创建一个负载均衡服务,以便得到负载均衡IP:

640

有了IP,我们就可以创建LoadBalancer Service了,YAML定义如下所示:

apiVersion: v1  #api版本	
kind: Service #Service	
metadata: #标准元数据	name: demo  #名称	namespace: default #命名空间	
spec: #规范	clusterIP: 10.3.255.28 #集群IP	loadBalancerIP: 106.52.99.55 #负载均衡IP	ports:  #端口列表	- name: tcp-80-80	nodePort: 31504 #节点IP	port: 80 #Pod端口	protocol: TCP #协议	targetPort: 80 #服务端口	selector: #选择器	app: demo	k8s-app: demo	qcloud-app: demo	type: LoadBalancer #服务类型,这里为负载均衡服务类型

如上述定义所示,我们进行创建Service。该定义设置了集群IP为“10.3.255.28”,负载均衡IP(loadBalancerIP)为“106.52.99.55”,节点端口为“31504”。Service定义好了,我们对负载均衡服务进行配置,配置一个TCP监听器如下所示:

640

接下来,我们就可以尽情访问了。通过节点IP和端口访问:

640

通过负载均衡IP访问:

640

通过绑定域名访问(请设置域名解析为负载均衡IP):

640

Microsoft SQL Server数据库部署

为了让大家更好的使用上述对象进行部署,本节笔者使用大家熟知的Microsoft SQL Server数据库来进行部署。

  • 部署目标

    完成Linux版本的Microsoft SQL Server 2017的部署

    使用节点目录“/var/mssql”来存储数据库文件

    设置初始密码为“123456abcD”

    开放1433端口,并且允许外部应用通过节点端口“30338”访问数据库

  • YAML定义

接下来,我们需要定义YAML文件。根据部署目标,我们确定可以使用Deployment对象和Service对象来完成本次部署。YAML文件定义如下如下所示:

apiVersion: extensions/v1beta1	
kind: Deployment	
metadata:	labels:	app: mssql	name: mssql #当前Deployment对象名称,同一个命名空间下必须唯一	
spec:	replicas: 1 #副本集数量	revisionHistoryLimit: 2 #保留的历史记录数,设置为0将清理部署的所有历史记录,无法回滚	strategy:	type: Recreate	template:	metadata:	labels:	app: mssql	spec:	containers:	- env:  #环境变量设置	- name: ACCEPT_EULA	value: "Y"	- name: SA_PASSWORD #sa密码设置	value: 123456abcD	image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu #镜像	imagePullPolicy: Always	name: mssql	ports:	- containerPort: 1433 #容器端口,SQLServer数据库默认端口为1433	resources:  #资源限制	limits:	cpu: "2"	memory: 2096Mi	requests:	cpu: 100m	memory: 827Mi	volumeMounts:	- mountPath: /var/opt/mssql/	name: data-vol	restartPolicy: Always	terminationGracePeriodSeconds: 30 #Pod结束时等待时长(单位为秒)	volumes:	- name: data-vol	hostPath:   #使用主机目录	path: /var/mssql	
---	
apiVersion: v1	
kind: Service	
metadata:	labels:	app: mssql	name: mssql #服务名称	
spec:	ports:	- name: tcp-1433-1433	nodePort: 30338 #节点端口,注意默认的端口范围为“30000-32767”,注意不要冲突	port: 1433  #端口	protocol: TCP	targetPort: 1433 #目标端口	selector: #Pod标签选择器	app: mssql	sessionAffinity: None	type: NodePort #服务类型,这里是负载均衡类型
  • 执行部署

接下来,我们使用命令执行部署:

kubectl apply -f mssqlserver.yaml

“kubectl apply”命令既可以创建资源,也可以用于更新资源对象。接下来我们通过命令可以查看部署状态:

kubectl get svc -o wide -lapp=mssql	
kubectl get po -o wide -lapp=mssql	
kubectl get deployment -o wide -lapp=mssql

640

如上图所示,部署已经成功,那么接下来我们可以使用管理工具进行连接访问:

640

往期内容

Docker+ Kubernetes已成为云计算的主流(二十六)

容器化之后如何节省云端成本?(二十七)

了解Kubernetes主体架构(二十八)

使用Minikube部署本地Kubernetes集群(二十九)

使用kubectl管理k8s集群(三十)

使用Kubeadm创建k8s集群之部署规划(三十一)

使用Kubeadm创建k8s集群之节点部署(三十二)

集群故障处理之处理思路以及健康状态检查(三十三)

集群故障处理之处理思路以及听诊三板斧(三十四)

使用WebDeploy部署远程IIS网站

使用Kubectl部署应用

通过Service访问应用 (1)

640?wx_fmt=png

转载是一种动力 分享是一种美德

640?

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【A】兼容Core3.0后 Natasha 的隔离域与热编译操作。

文章转载授权级别&#xff1a;A 预计阅读时间&#xff1a;15分钟一、 2.0预览版本增加了哪些功能大部分为底层的升级优化&#xff0c;例如&#xff1a;引擎兼容 Core3.0优化编译流程&#xff0c;增加编译前语法检测及日志&#xff0c;统一采用流加载方式在 Vito 的建议…

.NET Core 使用 K8S ConfigMap的正确姿势

背景ASP.NET Core默认的配置文件定义在 appsetings.json和 appsettings.{Environment}.json文件中。这里面有一个问题就是&#xff0c;在使用容器部署时&#xff0c;每次修改配置文件都需要重新构建镜像。当然你也可能会说&#xff0c;我的配置文件很稳定不需要修改&#xff0c…

2019-03-22-算法-进化(环形链表)

题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有环。 示例 1&#xff1a; 输入&#xf…

ASP.NET Core on K8S深入学习(9)Secret Configmap

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。01—Secret关于Secret在应用启动过程中需要一些敏感信息&#xff0c;比如数据库用户名、密码&#xff0c;如果直接明文存储在容器镜像中是不安全的&#xff0c;K8S提供…

.NET Core 学习资料精选:进阶

2019.09月就要正式发布.NET 3.0了&#xff0c;对于前一篇博文《.NET Core 学习资料精选&#xff1a;入门》大家学的可还开心&#xff1f;这是本系列的第二篇文章&#xff1a;进阶篇&#xff0c;喜欢的园友速度学起来啊。对于还在使用传统.NET Framework 框架的园友&#xff0c;…

VS Code 1.38 发布!

今天&#xff08;北京时间 2019 年 9 月 5 日&#xff09;&#xff0c;微软发布了 Visual Studio Code 1.38 版本。此版本主要更新的内容包括&#xff1a;Preserve case for global search and replace - 进行全局替换字符串时保留大小写。Settings editor string array valida…

.NET Core 收徒,有缘者,可破瓶颈

最近感悟天命&#xff0c;偶有所得&#xff0c;故而打算收徒若干&#xff0c;以继吾之传承。有缘者&#xff0c;可破瓶颈&#xff0c;职场巅峰指日可待。入门基本要求&#xff1a;1、工作经验&#xff1a;1年或以上。2、拜师费用&#xff1a;3999元&#xff08;RMB&#xff09;…

【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程

一、前言在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中&#xff0c;我们将继续介绍利用Docker部署Nginx服务实现负载均衡。文章最后附有Nginx部署的视频全过程。注&#xff1a;查看公众号历史文章&#xff0c…

开源导入导出通用库Magicodes.ExporterAndImporter发布

导入导出通用库 Magicodes.ExporterAndImporter为心莱团队封装的导入导出通用库&#xff0c;并且仍在跟随项目不断地打磨。GitHub地址&#xff1a;https://github.com/xin-lai/Magicodes.ExporterAndImporter目录特点相关官方Nuget包导出 Demo普通导出特性导出列头处理或者多语…

netcore 中的动态代理与RPC实现(微服务专题)

一、关于RPC的调用1. 调用者&#xff08;客户端Client&#xff09;以本地调用的方式发起调用&#xff1b;  2. Client stub&#xff08;客户端存根&#xff09;收到调用后&#xff0c;负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体&#xff1b; …

[翻译] .NET Core 3.0 Preview 9 发布

原文: Announcing .NET Core 3.0 Preview 9今天&#xff0c;我们宣布推出 .NET Core 3.0 Preview 9。就像 Preview 8 一样&#xff0c;我们专注于打磨 .NET Core 3.0 的最终版本&#xff0c;而不是添加新功能。如果这些最终版本看起来不像早期预览版那么令人兴奋&#xff0c;我…

谈谈“学习”这件事儿

曾经有童鞋在我博客留言&#xff1a;楼主你是如何学习的&#xff0c;肿么那么牛逼&#xff08;注&#xff1a;真不牛逼&#xff0c;只不过我讲的你刚好不知道&#xff0c;在你心中就形成了好牛逼的样子&#xff09;曾经也有童鞋加我好友&#xff0c;开头第一句则是&#xff1a;…

持续集成之应用k8s自动部署

持续集成之应用k8s自动部署Intro上次我们提到了docker容器化及自动化部署[1]&#xff0c;这仅仅适合个人项目或者开发环境部署&#xff0c;如果要部署到生产环境&#xff0c;必然就需要考虑很多因素&#xff0c;比如访问量大了如何调整部署&#xff0c;如何更好的应对大并发的情…

持续集成之应用容器化及自动化部署

通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署IntroAzure DevOps Pipeline 现在对于公开的项目完全免费&#xff0c;这对于开源项目来讲无疑是个巨大的好消息&#xff0c;在 Github 的 Marketplace 里有个 Azure Pipeline&#xff0c;就是微软的 Azure DevOps …

持续集成之 Nuget 进阶

持续集成之 Nuget 进阶Intro之前介绍了一篇基于 Azure pipeline 的 nuget 包的持续集成配置&#xff0c;但是比较粗糙&#xff0c;这里介绍一下结合 Cake 实现更优雅的 nuget 包发布流程。实现目标&#xff1a;分支(除master/preview)有代码 push 或者 pr 时 自动 buildpreview…

做“是非题”的正确姿势

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达有时也会有感而发&#xff0c;来加个餐&#xff5e;我的第「107」篇原创敬上大家好&#xff0c;我是Z哥。这两天中国男篮的事&#xff0c;让我有感而发。不知道你有没有留意到&#xff0c;我们身边总有类似下面这样的事情…

依赖倒置原则(DIP)、控制反转(IoC)、依赖注入(DI)(C#)

象的控制权交由配置文件控制&#xff0c;然后根据配置文件中的信息&#xff08;程序集类型&#xff09;&#xff0c;通过反射来获取对象&#xff0c;而不是直接new对象&#xff0c;这也是控制反转的一种体现。IoC容器会连接程序中的所有模块&#xff0c;模块将所需对象的控制权…

四种为HttpClient添加默认请求报头的解决方案

HttpClient在Web调用中具有广泛的应用&#xff0c;而为它添加默认请求头是我们经常遇到的需求&#xff0c;本文介绍4种为HttpClient添加默认请求头的方式。直接在创建的HttpClient对象的DefaultRequestHeaders集合中添加报头。class Program{static Task Main()> SendAsync…

【盛派内部分享资料】本期主题:使用JavaScript HTML CSS构建跨平台桌面应用

先上录制视频友情提示&#xff1a;如果公众号内视频无法显示高清视频&#xff0c;您也可以在小程序内观看高清视频&#xff0c;点击下方按钮观看&#xff1a;【盛派内部分享资料】本期主题&#xff1a;使用JavaScript HTML CSS构建跨平台桌面应用本次活动由盛派技术人员伏允坤主…

负载均衡及负载均衡器

负载均衡在分布式系统中&#xff0c;负载均衡&#xff08;load balancing&#xff09;是一种有效的将网络请求分配到多个服务器的过程。通过将负载进行负载均衡&#xff0c;可以有效地改进系统响应时间&#xff0c;提高系统的可用性。随着系统变的愈发复杂&#xff0c;用户增多…