7. Kubernetes核心资源之Service服务实战
- **service分类 : **
-
**ClusterIP : **
-
默认类型,自动分配一个【仅集群内部】可以访问的虚拟IP
-
**NodePort : **
-
对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ip+NodePort来访问该服务
-
**LoadBalancer : **
-
使在NodePort的基础上,借助公有云创建一个外部负载均衡器,并将请求转发到NodePort
-
可以实现集群外部访问服务的另外一种解决方案,不过并不是所有的k8s集群都会支持,大多是在公有云托管集群中会支持该类型
-
**ExternalName : **
-
把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 Kubernetes 1.7或更高版本的kube-dns才支持。
-
- **service和pod之间是通过 selector.app进行关联的 : **
spec: # 描述selector: # 标签选择器,确定当前service代理控制哪些podapp: xdclass-nginx
- **yml模板文件 : **
apiVersion: v1
kind: Service
metadata:creationTimestamp: nullname: xdclass-svc
spec:ports:- port: 80 # service服务端口protocol: TCPtargetPort: 80 # pod端口,常规和容器内部端口一致selector:app: xdclass-nginx-pod
status:loadBalancer: {}
- **关于K8S中端口的概念区分 : **
- **port **
- 是service端口,即k8s中服务之间的访问端口 ,clusterIP:port 是提供给集群内部客户访问service的入口
- **nodePort **
- 容器所在node节点的端口,通过nodeport类型的service暴露给集群节点,外部可以访问的端口
- **targetPort **
- 是pod的端口 ,从port和nodePort来的流量经过kube-proxy流到后端pod的targetPort上,进入容器。
- **containerPort **
- 是pod内部容器的端口,targetPort映射到containerPort。

- 4种端口作用不一样,port和nodePort都是service的端口
- port暴露给集群内客户访问服务,nodePort暴露给集群外客户访问服务
- 这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod中的容器
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: devlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.20imagePullPolicy: IfNotPresentports:- containerPort: 80 #容器端口
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:type: NodePort # 有配置NodePort,外部可访问k8s中的服务 ,ports:- name: nginxport: 80 # 服务service的访问端口protocol: TCPtargetPort: 80 # pod端口,映射到容器端口nodePort: 30015 # NodePort,通过nodeport类型的service暴露给集群外部访问selector:app: nginx
**操作 : **
# 创建Deployment
kubectl apply -f deploy-nginx-pod.yaml# 查看deployment和pod (service的缩写是svc)
kubectl get deployment,pod,svc -n dev -o wide# 暴露服务 clusterIP 类型
kubectl expose deploy xdclass-deploy --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev# 查看服务(多了个类型是ClusterIP的,通过curl clusterIp+port可以访问)
kubectl get deployment,pod,svc -n dev -o wide# 查看服务详情
kubectl describe svc svc-nginx1 -n dev
- **NodePort : **
# 创建NodePort类型服务 (网络安全组记得开放32451端口)
kubectl expose deploy xdclass-deploy --name=svc-nodeport-nginx1 --type=NodePort --port=80 --target-port=80 -n dev


# 查看服务详情
kubectl describe svc svc-nodeport-nginx1 -n dev

Endpoint(缩写是ep)
- 是k8s中的一个资源对象,存储在etcd中,记录service对应的所有pod的访问地址
- 里面有个Endpoints列表,就是当前service可以负载到的pod服务入口
- service和pod之间的通信是通过endpoint实现的
# 查看endpoint列表
kubectl get ep svc-nodeport-nginx1 -n dev -o wide
- service如何决定分发请求到后端的Pod?

kubernetes提供了两种负载均衡策略
- 默认,kube-proxy的策略,如随机、轮询
- 使用会话保持模式,即同个客户端的请求固定到某个pod,在spec中添加sessionAffinity:ClientIP即可
**操作 : **
#查看全部pod和ip
kubectl get pods -n dev -o wide#修改pod里面容器nginx的默认静态页面,内容为Pod所在的ip
kubectl exec -it xdclass-deploy-64967f6b67-p66wh -n dev /bin/shecho "xdclass.net 5" > /usr/share/nginx/html/index.html# curl访问ip+port 或 浏览器直接访问
相关文章:
7. Kubernetes核心资源之Service服务实战
**service分类 : ** **ClusterIP : ** 默认类型,自动分配一个【仅集群内部】可以访问的虚拟IP **NodePort : ** 对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ipNodePort来访问该服务 **LoadBalanc…...
《向量数据库指南》——企业采用非结构化数据的场景及其深远影响
引言 在当今数字化转型的浪潮中,企业数据的种类与规模正以前所未有的速度增长,其中非结构化数据作为信息时代的重要组成部分,其价值日益凸显。Lynn提出的关于企业最先采用非结构化数据的观察,引发了我们对这一领域深入探索的兴趣。Charles的见解则为我们揭示了非结构化数据…...
Linux内核编程(十二)热插拔
本文目录 一、知识点1. 热插拔概念2. 热插拔机制3. Netlink机制 二、内核发送uevent事件到用户空间1. kobject发送uevent事件2. udevadm命令查看★示例代码:★优化:完善kset_uevent_ops(热插拔事件结构体) 三、用户空间使用Netlin…...
七夕警示:探索社工库与网络搜索下的个人隐私泄露与保护策略
随着七夕节的脚步日益临近,空气中弥漫着浪漫与温馨的气息。这个充满爱意的节日,我们沉浸在与心爱之人共享甜蜜时光的同时,不应忽视网络安全和个人隐私保护的重要性。在数字化时代,个人信息泄露的风险无处不在,如何在享…...
Redis-哨兵监控(sentinel)
是什么 Docs 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 作用:无人值守运维 能干嘛 1.主从监控 监控主从redis的库是否运行正常 2.消息通知 哨兵可以将故障转移的结果发送给客户端 3.…...
RISC-V反汇编调试记录分享
RISC-V反汇编调试记录分享 本文记录一次使用反汇编进行调试分析。 最近在 rtthread 下适配 MilkV Duo 的硬件定时器驱动时遇到了一些问题,demo 运行时报以下错误: Unhandled Exception 2:Illegal Instruction scause:0x0x0000000000000002,stval:0x0x…...
python上下文管理器 with的使用
python上下文管理器 with是从Python一个语法糖,它是一种上下文管理协议,目的在于把我们之前常见一个开发 try,except 和finally 关键字和一些文件开关闭合资源分配释放等问题都简化。 总结起来使用python 提供的with主要的作用是: 实现自动…...
24/8/8算法笔记 决策树构建鸢尾花
决策树是一种由算法自动设计的模型。在机器学习中,构建决策树的过程通常遵循以下步骤: 特征选择:算法会评估每个特征,并选择一个特征作为节点分裂的依据。这个选择基于某种准则,如信息增益(ID3算法…...
数据库扩展新篇章:主流分库分表中间件全解析
摘要: 随着企业数据量的激增,传统的单体数据库架构已经无法满足日益增长的性能需求和数据管理复杂性。分库分表技术作为解决这一问题的有效手段,通过将数据水平或垂直地分散到多个数据库中,提高了系统的扩展性和处理能力。本文将详…...
python看图片猜价格游戏,frame 和PhotoImage的使用
import tkinter.messagebox import tkinter import randomwindow tkinter.Tk()window.geometry(800x400)window.title(猜数字游戏)good_price random.randint(10, 100) input_price random.randint(1, 100)def sumit():global good_priceif entry.get() "" or en…...
未来展望:等保测评在网络安全领域的持续创新与发展
在数字化浪潮席卷全球的今天,网络安全已成为维护国家安全、社会稳定和经济发展的关键基石。作为网络安全保障体系的核心组成部分,等级保护测评(简称“等保测评”)在应对日益复杂多变的网络威胁中发挥着不可替代的作用。展望未来&a…...
构建深度学习驱动的多目标检测系统:YOLO模型及应用
随着计算机视觉技术的飞速发展,多目标检测在各种实际应用中发挥着越来越重要的作用。本文将j简单介绍如何构建一个基于深度学习的多目标检测系统,包括数据准备、模型训练、UI界面开发和部署的完整流程。如有部署的想法,想要(UI界面…...
算法刷题笔记 染色法判定二分图(染色法例题 C++实现)
文章目录 题目描述二分图介绍和基本思路实现代码(C) 题目描述 给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。 输入格式 第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v…...
在Ubuntu上安装OpenBLAS和Eigen
安装 openblas 直接使用 apt-get 命令即可安装: sudo apt-get install libopenblas-dev检查是否安装成功,可以用下面的示例代码 example.cpp: #include <stdio.h> #include <stdlib.h> #include "cblas.h"int main(…...
Vue前端面试基础(一)
Vue面试题目详解可以涵盖多个方面,从基础知识到高级特性,再到实际应用和性能优化等。以下是一些常见的Vue面试题目及其详解: 1. Vue双向绑定原理 详解: Vue的双向绑定原理是通过数据劫持结合发布者-订阅者模式实现的。Vue在内部…...
使用Gitlab实现monorepo多项目CICD
CI/CD是什么 CI/CD(Continuous Intergration/Continuous Delpoy),即持续集成/持续部署,或称为持续集成/持续交付,作为一套面向开发和运维团队的解决方案,CI/CD 主要解决集成新代码和向用户频繁交付应用的问…...
设计模式实战:银行账户管理系统的设计与实现
问题描述 设计一个银行账户管理系统,支持不同类型的账户(如储蓄账户、支票账户)进行存取款操作,并能够在账户余额发生变化时通知相关观察者(如用户、银行系统)。系统需要确保账户操作的灵活性和可扩展性。 设计分析 策略模式 策略模式定义了一系列算法,并将每个算法…...
⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》
[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code: cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…...
高效的编程学习方法和技巧
编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...
sublime text插件开发
手工开发了一些ST的py插件,记录过程中遇到的一些问题。 ST3/ST4 begin_edit问题 报错: begin_edit() missing 2 required positional arguments: edit_token and cmdST3时已经不能直接调view.begin_edit方法了,需要通过runCommandTextComm…...
FLUX.小红书极致真实V2效果展示:宠物毛发层次、眼睛高光、微表情刻画
FLUX.小红书极致真实V2效果展示:宠物毛发层次、眼睛高光、微表情刻画 想不想拥有一款能生成媲美专业摄影棚照片的AI工具?今天要展示的,就是这样一个“神器”——基于FLUX.1-dev模型和小红书极致真实V2 LoRA打造的本地图像生成工具。它最大的…...
Ostrakon-VL-8B图文对话实战:上传厨房照片→提问卫生问题→获取结构化反馈
Ostrakon-VL-8B图文对话实战:上传厨房照片→提问卫生问题→获取结构化反馈 想象一下,你是一家连锁餐厅的卫生督导员,每周要巡查几十家门店的厨房。传统方式是什么?拿着检查表,挨个角落拍照,回到办公室再整…...
GESP C++三级真题解析:小猫分鱼问题背后的数学逻辑与代码实现
GESP C三级真题解析:小猫分鱼问题背后的数学逻辑与代码实现 1. 问题背景与数学建模 小猫分鱼问题乍看像一道简单的算术题,实则蕴含了递归思想和模运算的精妙应用。题目描述N只小猫分一堆鱼,每只小猫都将当前鱼数平分成N份后,扔掉多…...
动态规划:从贝尔曼的智慧到算法竞赛的基石
引言在算法设计的广阔天地中,动态规划(Dynamic Programming,简称DP)无疑是一颗璀璨的明星。它既不像二分查找那样简洁直接,也不似深度优先搜索那样易于直觉理解,而是以一种近乎“魔法”的方式,将…...
Go channel使用模式与最佳实践
Go语言中的channel是一种强大的并发原语,它不仅是goroutine之间通信的桥梁,更是实现高效并发模式的核心工具。无论是数据传递、同步控制还是任务编排,channel都能以简洁优雅的方式解决问题。本文将深入探讨几种典型的使用模式与最佳实践&…...
2026最权威的十大AI辅助写作平台横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于深度学习模型的论文一键生成技术,可快速整合文献资料,能提取核心…...
嵌入式系统LCD汉字显示原理与优化实践
1. 嵌入式屏幕显示汉字的基本原理在嵌入式系统中,LCD屏幕显示汉字的核心原理可以概括为"点阵映射"。这与我们小时候玩过的LED点阵显示原理完全相同。想象一下,当你用许多小灯泡排列成一个方阵,通过控制每个灯泡的亮灭来组成图案或文…...
避坑指南:CentOS7升级内核开启BBR加速最常见的5个错误及解决方法
CentOS7内核升级与BBR加速避坑实战手册 每次在CentOS 7服务器上折腾内核升级和BBR加速时,总会遇到各种"惊喜"。记得第一次操作时,我盯着黑屏的服务器足足半小时,心跳快得像是刚跑完马拉松。本文将分享那些只有踩过坑才知道的实战经…...
OpenSpeedy终极指南:5分钟掌握免费开源游戏加速工具
OpenSpeedy终极指南:5分钟掌握免费开源游戏加速工具 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾经在游戏中遇到过这样的烦恼?剧情推进太慢…...
从Rocky Linux迁移到openEuler:我的K8s集群部署体验与配置差异全记录
从Rocky Linux迁移到openEuler:我的K8s集群部署体验与配置差异全记录 当企业级用户开始考虑从CentOS/RHEL生态转向国产化操作系统时,openEuler往往成为首选。作为一个长期使用Rocky Linux部署Kubernetes集群的运维工程师,最近我完成了从Rock…...
