k8s网络服务

news/2024/11/29 0:01:06/

k8s 中向外界提供服务的几种方法port-forwardNodePort,以及 更加常用的提供服务的资源ingress。

1  kubectl port-forward service/redis 6379:6379  现在k8s中有一个pod运行在6379,本机访问映射到6379上,它可以针对部署,服务,pod类型,效果相同

启用后会占用当前终端的标准输出,可以在后面添加&来指定后台运行:

kubectl port-forward service/redis 6379:6379 &

如图在前台运行情况:它会监听虚拟机的127.0.0.1的6379端口转发到port中去从而能访问资源,但没有NodePoint使用的多

更改收听地址:

Kubectl 默认绑定127.0.0.1(IPv4) 和::1(IPv6) 地址上的本地端口。您可以通过在运行命令–address时提供标志来指定自己的 IP 集:port-forward2 NodePort 映射服务到节点端口。

kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1

该标志只接受 IP 地址和localhost关键字。后者被解释为包含127.0.0.1and ,当省略::1时匹配命令的默认值。–address、port-forward可以将 pod 临时映射出来,一般用于测试资源是否可用,在生产环境并不会大规模应用。

2 服务非代理模式NodePort

相对于上一种port-forward来说,这一种要正式的多,NodePort可以将其 转发到所有 k8s 节点的指定端口上,并且不会像port-forward一样在前台运行。

kubectl create deployment redis --image=redis 创建一个部署

kubectl expose deployment redis --type=NodePort --port=6379 暴露一个服务,并且它能实现负载均衡根据集群ip访问不同主机下的指定端口,可以查看服务详情minikube service 加服务名如

,其中url中的ip是pod所在的上层虚拟环境ip地址,虚拟机可以根据这个虚拟ip环境中的port进行资源访问,问题?现在虚拟机加pod所在的虚拟ip才能访问,现在我想虚拟机直接访问下层的虚拟ip的环境,这就用到上面的第一个,使用kubelctl将本地ip和pod资源直接绑定,假设虚拟机环境ip为192.168.56.2,kubectl在该环境下,连接的其他环境的pod,环境ip地址是192.168.67.2,现在使用nodepoint的映射单口加ip直接就能访问,要kubectl访问它所连接到的远程资源,就把它当成代理,监听本地请求然后转发响应,方式如上默认监听是127.0.01的地址如果ip想对外使用可以监听多个,如下:kubectl port-forward service/redis 6379:6379 --address 127.0.0.1,192.168.56.1

kubectl port-forward --address 0.0.0.0  service/redis 6379:6379 使更多虚拟机的ip地址,只要物理机对虚拟机ip能ping通就能访问到目标,前提是虚拟机的防火墙要关闭,本人之前就是没关闭物理机无法访问。systemctl status/stop firewalld 它是centos7以后的默认防火墙。

由于防火墙会被用来实现k8s的网络代理服务如kube-peoxy中就是以防火前模块实现所以这里关闭防火墙可以让物理机访问到虚拟机和minikube中的pod,当如果关闭防火墙就意味着minikube环境失去了对虚拟宿主机的依赖,就无法使用网络,更不可能拉取镜像。

这样你在虚拟机中就可以telnet +ip+端口 物理机也能访问该虚拟机

但是这里有个问题,假如我的 k8s 里运行了多个 web 应用服务器,我总不能让用户通过端口号http://domain:8081http://domain:8082来访问不同的 web 服务吧。能不能处理成http://domain/web1http://domain/web2 ...这种形式呢?当然可以,这个就是接下来要说的Ingress

4 使用ssh连接,密钥对或者使用密码连接,直接访问目标服务

 minikube dashboard开启了之后生成有一个虚拟机的可访问地址,如果不使用代理通过物理机ssh -f -N -L 35967:localhost:35967 vagrant@虚拟ip,输入密码会在前台阻塞运行,此时就能访问,它也不能能绕过防火墙,因为它需要kubectl在虚拟机暴露的端口,但也可以物理机直接连接minikube虚拟机来绕过防火墙直接访问docker中的服务,不需要绕来绕去,转来转去。

另外一种不适用默认生成的,查看服务的运行端口通过

 kubectl get service kubernetes-dashboard -n kubernetes-dashboa

服务运行在80端口上,内部容器运行在9090端口上可以查看pod的详细信息

kubectl get describe pod -n kubernetes-dashboard kubernetes-dashboard-695b
有了这些信息可以通过代理直接让过给的访问地址,物理机通过虚拟机ip地址直接访问,这本质上和生成的url是一样的道理,只是在鉴定和绑定的ip范围变大了,更有利于外部访问,如果使用ssh来与连接到的主机建立一对一请求还需要外部物理机定义,而且物理机访问的路径不定可以多个ip。当使用转发时物理机会创建一个端口号来监听物理的请求路径,然后转发到虚拟机

虚拟机杀死进程后物理机也删除端口的占用。

  防火墙开启路由转发:

#临时开启
[root@snat zones]# echo 1 > /proc/sys/net/ipv4/ip_forward#永久开启
[root@snat zones]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@snat zones]# sysctl -p

firewalld防火墙开启masquerade, 实现地址转换

设置默认区域的SNAT的IP伪装
[root@snat zones]# firewall-cmd --add-masquerade --permanent
[root@snat zones]# firewall-cmd --reload
#################################下面部分不用执行#################################
查看默认区域的SNAT是否允许
[root@snat zones]# firewall-cmd --query-masquerade --permanent删除默认区域的SNAT功能
[root@snat zones]# firewall-cmd --remove-masquerade --permanent

3 通过 Ingress 暴露服务:nblogs.com/gaoyanbing/p/14031522✌ 

4 扩展 :端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口_established状态-CSDN博客

《Linux运维总结:firewalld防火墙使用教程》_firewalld教程-CSDN博客


http://www.ppmy.cn/news/1550758.html

相关文章

设计模式之 中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,旨在通过引入一个中介者对象来降低多个对象之间的耦合度,从而促进对象间的通信和协调。中介者模式的核心思想是“将对象之间的直接交互移到一个中介者对象中”,让中…

AI在线免费视频工具4:AI视频编辑ai-video-composer

1、ai-video-composer 使用自然语言从您的资产组成新的视频。添加视频、图像和音频资源,让 Qwen 2.5-Coder 为您生成一个新的视频(使用 FFMPEG) https://huggingface.co/spaces/huggingface-projects/ai-video-composer

突破Zustand的局限性:与React ContentAPI搭配使用

Zustand在状态管理中是非常适手的工具,在很多场景中我们都可以用它来解决复杂问题. 但是由于Zustand的设计理念,它仍然有一些限制,在这里用官网中的小demo举一个很简单的例子: import { create } from zustand type CountStore …

numpy.digitize函数介绍

numpy.digitize 是 NumPy 中的一个函数,用于根据给定的边界(分箱规则)对输入数组中的值进行分箱,返回对应的箱索引。它在分段处理、统计分布和离散化数据等场景中非常有用。 函数签名 numpy.digitize(x, bins, right=False)参数详解 x: 输入数组,表示需要进行分箱的值。…

PG17 外链设置

很多工具不太支持PG17,看了下要 WINDOS测试链接 查看端口 [sharksharkdb>~]$pg_isready/tmp:5432- accepting connections 查看PG日志 ​​​​​​​ 2024-11-22 05:23:27.361 CST [113921] LOG: invalid authentication method"192.168.2.0/24"2024-11-22 0…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

云计算的计算包括哪些内容

‌云计算的计算主要包括以下几种类型‌: ‌分布式计算‌:分布式计算是一种计算方法,它将大型问题分解成多个小任务,然后分配给多个计算机进行处理。这种方法可以提高计算效率和可靠性‌1。‌并行计算‌:并行计算是同时…

map和redis关系

Map 和 Redis 都是用于存储和管理数据的工具,但它们在用途、实现和应用场景上有所不同。下面详细解释 Map 和 Redis 之间的关系和区别。 1. Map 数据结构 定义 Map 是一种数据结构,用于存储键值对(key-value pairs)。每个键都是…