持续集成部署-k8s-服务发现-Service

@[TOC](持续集成部署-k8s-服务发现-Service:配置讲解及基础命令)

1. Service 简介

在K8s中,`Service` 是一种可以暴露一个或多个`Pod`的稳定的网络终点,从而形成逻辑上的应用服务单元,为服务发现、负载均衡、容错等提供了基础设施支持。

`Service`的主要作用包括以下几个方面:

  • **1. 实现内部服务发现**:在K8s中,往往会有多个`Pod`运行同一种应用服务,`Service`可以将这些`Pod`组合成一个逻辑上的服务单元,并且为这个服务单元分配一个唯一的`Cluster IP`地址,以供其他应用程序调用。

  • **2. 提供负载均衡能力**:`Service`可以将请求引导到多个后端`Pod`中的任意一个,从而实现负载均衡。

  • **3. 支持动态扩容**:当需要增加`Pod`时,只需要将其添加到K8s集群中即可,Service会自动将其纳入服务单元并开始将请求转发到该Pod。

  • **4. 支持多种调度策略**:`Service`支持多种调度策略,包括轮询、最少连接数、IP哈希、基于标签选择器的随机等等。

总之,`Service`是K8s平台中非常重要的一个组件,它提供了一种简单、灵活、可靠的方式来支持容器化应用程序的服务发现和负载均衡。

2. 基础命令

创建 Service :`nginx-svc.yaml`,内容如下:

```yaml

apiVersion: v1

kind: Service # 资源类型为 Service

metadata:

name: nginx-svc # Service 名字

labels:

app: nginx # Service 自己本身的标签

spec:

selector: # 匹配哪些 pod 会被该 service 代理

app: nginx-deploy # 所有匹配到这些标签的 pod 都可以通过该 service 进行访问

ports: # 端口映射

  • port: 80 # service 自己的端口,在使用内网 ip 访问时使用

targetPort: 80 # 目标 pod 的端口

nodePort: 32000 # 固定绑定到所有 node 的 32000 端口上

name: web # 为端口起个名字

type: NodePort # 随机启动一个端口(30000~32767),映射到 ports 中的端口,该端口是直接绑定在 node 上的,且集群中的每一个 node 都会绑定这个端口

也可以用于将服务暴露给外部访问,但是这种方式实际生产环境不推荐,效率较低,而且 Service 是四层负载

```

接着创建Service:`kubectl create -f nginx-svc.yaml`

查看 Service 列表:

```sh

root@docker-54 \~\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 160d nginx ClusterIP None \ 80/TCP 5d19h nginx-svc NodePort 10.96.169.50 \ 80:31772/TCP 3d18h \[root@docker-54 \~\]# \`\`\` 查看 service 信息,通过 service 的 cluster ip 进行访问: \`\`\`sh \[root@docker-54 services\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 160d nginx ClusterIP None \ 80/TCP 5d19h nginx-svc NodePort 10.96.169.50 \ 80:31772/TCP 3d18h \[root@docker-54 services\]# \[root@docker-54 services\]# curl 10.96.169.50 \ \ \ \Welcome to nginx!\ \ body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } \ \ \ \Welcome to nginx!\ \If you see this page, the nginx web server is successfully installed and working. Further configuration is required.\ \For online documentation and support please refer to \nginx.org\.\
Commercial support is available at \
nginx.com\.\
\\Thank you for using nginx.\\ \
\

相关推荐
要站在顶端41 分钟前
基于 curl 实现 Jenkins 上传制品到 JFrog Artifactory
运维·ci/cd·jenkins
稚辉君.MCA_P8_Java14 小时前
Gemini永久会员 containerd部署java项目 kubernetes集群
后端·spring cloud·云原生·容器·kubernetes
4***997415 小时前
DevOps在云原生中的CI/CD流水线
ci/cd·云原生·devops
间彧16 小时前
Helm深度解析:Kubernetes应用管理的利器
kubernetes
间彧17 小时前
K8s: 如何通过kubectl命令实时监控滚动更新的详细过程?
kubernetes
岚天start18 小时前
K8S环境中Containerd运行时占用文件定位清理
java·rpc·kubernetes
赵文宇(温玉)1 天前
不翻墙,基于Rancher极速启动Kubernetes,配置SSO登录,在线环境开放学习体验
学习·kubernetes·rancher
炸裂狸花猫1 天前
开源域名证书工具 - cert-manager
云原生·容器·kubernetes·开源·cert-manager
会飞的小蛮猪1 天前
Ubuntu24.04基于Docker部署K8s(使用私服部署)
经验分享·docker·云原生·容器·kubernetes
西部森林牧歌1 天前
Arbess从基础到高阶(14) - 使用Arbess+GitLab+SonarQube实现代码扫描完成后自动化部署
ci/cd·gitlab·sonarqube·arbess·tiklab devops