目录

  • 通过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

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

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

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

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

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

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

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

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

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

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

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

有了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监听器如下所示:

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

通过负载均衡IP访问:

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

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

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

往期内容

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

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

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

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

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

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

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

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

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

使用WebDeploy部署远程IIS网站

使用Kubectl部署应用

通过Service访问应用 (1)

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

通过Service访问应用 (2)相关推荐

  1. 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)

    本节开始学习 Service. 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会 ...

  2. 通过Service访问应用 (1)

    目录 通过Service访问应用  通过Pod IP访问应用  通过ClusterIP Service在集群内部访问  通过Service访问应用 通过之前的操作,应用部署完成了,我们的Demo网站已 ...

  3. 查询 service monitor 时发生内部错误_通过Service访问应用 (1)

    目录 通过Service访问应用 通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用 通过之前的操作,应用部署完成了,我们的Demo网站已经成功 ...

  4. k8s Nodeport方式下service访问,iptables处理逻辑(转)

    原文 https://www.myf5.net/post/2330.htm k8s Nodeport方式下service访问,iptables处理逻辑 2017年07月11日 0条评论 976次阅读 ...

  5. springboot项目在线程中调用service访问数据库

    创建类ApplicationBeanFactory package com.xxx.comm.ApplicationBeanFactory;import org.springframework.bea ...

  6. 玩转k8s(四)—— 通过Service访问Pod

    我们不应该期望k8s Pod是健壮的,而是要假设Pod中的容器很可能因为各种原因发生故障而死掉.Deployment等Controller会通过动态的创建和销毁Pod来保证应用整体的健壮性.换句话说, ...

  7. [WCF] - Odata Service 访问失败,查看具体错误信息的方法

    Issue 解决 为 Data Service 配置属性如下: [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults ...

  8. android service 访问数据库,XE5 ANDROID通过webservice访问操作MSSQL数据库

    XE5 ANDROID通过webservice访问操作MSSQL数据库 上接XE5 ANDROID平台 调用 webservice 一.服务端 在ro里添加函数(在impl上添加阿东connectio ...

  9. 【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题

    问题:The permissions granted to user 'TOUCHPOINTMED\sshi' are insufficient for performing this operati ...

最新文章

  1. linux笔记:压缩解压命令gzip,gunzip,tar,zip,unzip,bzip2,bunzip2
  2. Android中个人推崇的数据库使用方式
  3. ddl是什么意思网络语_DDL语句是啥
  4. 【数理知识】《矩阵论》方保镕老师-第5章-矩阵微积分及其应用
  5. 浅谈Handler机制
  6. 移动场景在其缩略图中显示场景中所显示的区域
  7. SQLAlchemy ORM教程之一:Create
  8. 图论 —— 图的遍历 —— 欧拉通路与欧拉回路问题
  9. sql语句有没有怎么优化的空间,这条语句在我这里执行是死机
  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_18-页面静态化-模板管理-GridFS研究-取文件...
  11. 实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
  12. Python爬虫 刷博客访问量
  13. win11系统用户名称为中文导致文件夹出现繁体字文件夹、系统路径配置错误修改教程(博主亲测,基于win11,系统文件保留)
  14. 匹兹堡大学约翰斯敦计算机学院,英语翻译翻译Every human being,no matter what he is doing,gives off...
  15. 2022-2027年(新版)中国有机硅行业运行动态及产销需求预测报告
  16. [图文]symbian与uiq开发教程(转)
  17. 19:C语言之C循环-寻找完数
  18. 重装系统后win10激活
  19. Auto js编写微信小游戏 《一笔画完》 辅助工具--开发篇
  20. 单细胞时代 || 细胞身份概念的演变

热门文章

  1. lr java脚本_【上海校区】 LR Java脚本编写方法
  2. 您的MyFitnessPal帐户几乎肯定已被黑客入侵,请立即更改密码
  3. 程序改变了命运,程序生活一天比一天好,对未来也充满了希望
  4. 怎样用原生js配合css的transition写个无缝滚动
  5. bootstrap模态框
  6. ZABBIX2.4.8监控 Windows Mysql数据库
  7. VNCServer 配置
  8. GNU ARM 汇编指令[转载]
  9. snmpd服务无法更改默认端口
  10. C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1