web service设置参数命名空间_通过Service访问应用 (2)

e2cdccdfcacc45c7516bc5d6a0eea9d7.gif

目录

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

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

  • Microsoft SQL Server数据库部署

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

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

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

YAML定义如下所示:

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

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

kubectl create -f nodePortService.yamlkubectl get services nodeport-service
9591e6fa19cd7b80bb2a76f910905096.png

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

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

f7276069cfe16e122bd82f7996149000.png

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

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

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

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

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

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

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

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

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

e50fa63e31ddb21b61dc327640fe2cbe.png

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

apiVersion: v1 #api版本kind: Service #Servicemetadata: #标准元数据 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监听器如下所示:

d931fcd2994c97942c5ec7a50cc25a10.png

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

df99a2c1cbd170c80fcb0dfc311d3d7f.png

通过负载均衡IP访问:

ad820a358d2fa4636e16dd8574822954.png

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

f5123953e4fd9f5f1503bef54742100f.png

Microsoft SQL Server数据库部署

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

  • 部署目标

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

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

    设置初始密码为“123456abcD”

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

  • YAML定义

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

apiVersion: extensions/v1beta1kind: Deploymentmetadata: 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: v1kind: Servicemetadata: 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=mssqlkubectl get po -o wide -lapp=mssqlkubectl get deployment -o wide -lapp=mssql
c54e464b745cc8d5ebddb298eb5526cf.png

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

ad21528f4eaa20dc2140f56d40d98489.png ad41396fd82911257c2a587fea430d34.png

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

76c45c80d73cdb5fe0639eba24e39d06.gif

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值