阿里云使用SLB实现k8s的服务service

一、背景

k8s容器的服务service实现有以下常用方式:

  • NodePort

用于为集群外部访问Service后面Pod提供访问接入端口。

开发测试环境,可以使用这种方式,不依赖其他中间件。

好处是,可以访问Node节点的IP+${NodePort}

比如Node节点的IP地址是192.168.80.180,NodePort的端口是31767。那么外部访问地址是http://192.168.80.180:31767/doc.html。

  • LoadBalancer

当K8s运行在一个云环境内时, LB类型可自动触发创建一个软件负载均衡器用于对Service做负载均衡调度.

因为外部所有Client都访问一个NodeIP, 该节点的压力将会很大, 而LoadBalancer则可解决这个问题。

而且它还直接动态监测后端Node是否被移除或新增了,然后动态更新调度的节点数。

  • ClusterIP

默认类型,会自动分配一个内部IP,但是外部无法访问。

  • ExternalName模式

用于将集群外部的服务引入到集群内部,在集群内部可直接访问来获取服务。

适用于大多数服务已转移部署到K8S中,而少部分旧服务还部署在ECS。

二、创建SLB

第一步,申请新的slb实例,这里是一个内网网络。

(当然,你也可以使用lvs实现负载均衡,因为我们服务都部署在阿里云,直接购买的是负载均衡服务)

第二步,新增监听8899端口

(当然,你不用手动创建,在k8s容器侧操作即会自动创建监听。)

三、新建服务service

service.yaml详情:

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
    service.beta.kubernetes.io/alicloud-loadbalancer-id: ${slb的实例ID}
  labels:
    service.k8s.alibaba/loadbalancer-id: ${slb的实例ID}
  name: xxx-service
  namespace: java-service
spec:
  allocateLoadBalancerNodePorts: true
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ports:
    - name: xxx-service
      port: 8899
      protocol: TCP
      targetPort: 8899
  selector:
    app: xxx-service
  sessionAffinity: None
  type: LoadBalancer

注意,${slb的实例ID} 修改为你上文申请的SLB的实例ID值。

  • 关键信息是type: LoadBalancer,指明service的实现类型是LB。

  • selector: app: xxx-service 对应pod的labels。

四、总结

本文主要讲述的是,如何在云环境下的k8s容器里, 暴露服务service的时候,使用slb实现对外访问。

相关推荐
还是奇怪4 分钟前
OpenAI GPT-5.6 构建指南拆解:创业公司如何用模型选择与 Responses API 降低 Agent 成本
java·数据库·人工智能·gpt
IT摆渡者5 分钟前
基于 Docker 部署 Nextcloud 私有云盘(外挂 Windows 共享)项目实践
运维·docker·容器
可涵不会debug5 分钟前
LangChain 文本分割器详解:字符分割、Token 分割、硬约束递归分割实战
java·前端·数据库
sbjdhjd9 分钟前
ThinkPHP 5.0.10 缓存写入型 RCE 复盘:从手动搭建、换行绕过到源码单步验证 | 05
java·后端·安全·spring·网络安全·数据挖掘·php
Jeromefromhk15 分钟前
我把所有服务搬上 Kubernetes,又全部搬了回来
kubernetes·devops
程序员清风26 分钟前
记忆系统设计:让 Agent 拥有短期记忆与长期记忆
java·服务器·网络
EatFan35 分钟前
前后端分离项目中 Token 到底应该怎么设计?Access Token + Refresh Token 实战
java·前端·后端
麻瓜code39 分钟前
[Agent]Spring AI 工具调用实战:让大模型真正“干活“(@Tool 六大工具 + 统一注册)
java·人工智能·spring
vx-程序开发1 小时前
【毕设分享】springboot废品上门回收微信小程序---附源码94491
java·spring boot·毕业设计·源码·课程设计·毕设·大作业
宸津-代码粉碎机1 小时前
Spring AI 高危CVE漏洞深度复盘|生产禁跑版本汇总+临时防御+修复方案
java·大数据·人工智能·python·spring