目录
通过 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 集群之节点部署(三十一)
集群故障处理之处理思路以及健康状态检查(三十二)
集群故障处理之处理思路以及听诊三板斧(三十三)
开源导入导出通用库 Magicodes.ExporterAndImporter 发布
使用 Kubectl 部署应用
通过 Service 访问应用 (1)
来源: https://www.cnblogs.com/codelove/p/11527089.html