K8s: 从集群外部访问Service

server/2024/11/14 4:21:37/

从集群外部访问 Service


1 )概述

  • 在前面我们一直实践的是在集群内部访问 Service,之前有2种方法
    • 方法1:在一个node节点上,通过对创建的的时候,对port进行一个环境变量的注册
    • 来保证Service能够正确对 不同的pod 访问到
    • 就是在这个node节点上,也是在集群内部
    • 方法2:另外一种方式呢是通过DNS记录
    • 比如说静态的pod创建这种专有域名的方式来保证集群内部都能访问到这个pod,这个service
  • 但是,有些服务,比如说前端的应用 nginx,它要对集群外部进行服务提供的
  • 所以在这种情况下,需要集群提供对外部访问的这种机制
  • K8s提供了ClusterIP, NodePort和 LoadBalancer 这三种方式提供集群外部的访问
  • ClusterIP
    • 仅仅使用一个集群内部的IP地址 - 这是默认值
    • 选择这个值意味着你只想这个服务在集群内部才可以被访问到
    • 像你创建这个 Service, 默认,它会给你创建一个集群内部的一个IP地址
    • 它是一个相当于是一个内网的IP这个IP, 实际上, 外网(公网)它是访问不到的
    • 如果你是在内网的话,不推荐用这种方式创建 Service
  • NodePort
    • 在集群内部IP的基础上,在集群的每一个节点的端口上开放这个服务
    • 你可以在任意:NodePort地址上访问到这个服务
    • 这里的node指的是 worknode,在这个node上开一个端口,任何在这个端口口的请求
    • 它会会被转发到咱们的这个NodePort类型的service上
    • 如果是自己实践的话,可以实现这种NodePort类型的方式
  • LoadBalancer
    • 在使用一个集群内部IP地址和在NodePort上开放一个Service的基础上
    • 还可以向云提供者申请一个负载均衡器
    • 将流量转发到已经以NodePort形式开发的Service上
    • 在公网生产环境使用的时候,推荐是用这个LoadBalancer去负载均衡的方式
    • 向云提供商申请一个负载均衡器,然后这个负载均衡器再把流量转发到咱们的集群内部
    • 或者NodePort上开个放一个Service, 一般在公有云上上可以用 ELB 服务去构建Service域名

2 )基于NodePort来实践

  • 首先还是创建Service, 用于pod的通信
  • 之后创建这个deployment,创建deployment之后,它会创建一个nginx中的一个pod
  • 新建 node-port-nginx.yaml
    apiVersion: v1
    kind: Service
    metadata:name: svc-node-port-nginxlabels:app: nginxname: nginx-deployment
    spec:type: NodePortselector:app: nginxports:- port: 80name: svc-nginx-30001protocol: TCPtargetPort: 80nodePort: 30001
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:name: dep-node-port-nginx
    spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxresources:limits:memory: "64Mi"cpu: "500m"ports:- containerPort: 80
    
  • $ kubectl apply -f node-port-nginx.yaml
    service/svc-node-port-nginx created
    deployment.apps/dep-node-port-nginx created
    
  • $ kubectl get all
    NAME                                       READY   STATUS             RESTARTS          AGE
    pod/dep-node-port-nginx-854c74b9f4-96cmt   1/1     Running            0                 51sNAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    service/svc-node-port-nginx   NodePort    10.1.135.122   <none>        80:30001/TCP   51sNAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/dep-node-port-nginx   1/1     1            1           51sNAME                                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/dep-node-port-nginx-854c74b9f4   1         1         1       51s
    
  • 我们知道,这个服务的地址应该是这个Node的ip地址,而端口就是暴露出来的30001
  • $ kubectl describe pod dep-node-port-nginx-854c74b9f4-96cmt | grep Node 查看部署到了哪台机器上
    Node:         node2.k8s/10.211.55.12
    Node-Selectors:              <none>
    
  • 从上面可知道,外网可访问的地址为: 10.211.55.12:30001
  • 在浏览器上输入上述地址,呈现出: “Welcome to nginx!” 的页面,说明网络通畅了
  • 因为这台WorkNode节点是可以被外网访问到的, 基于之前的Service, 在这个Node节点上开了 30001 的端口
  • 访问这个 30001 端口会被路由到后端Service的80端口, 这个Service的80端口又会被转发到pod的80端口
  • 基于这种层层转发,才能访问到这个 nginx

http://www.ppmy.cn/server/19953.html

相关文章

(ChatGPT中文、吾爱Al、核桃、WeexAl地址发布页、ai创作、Chat中文)分享好用的ChatGPT

目录 1、ChatGPT 中文 - Chat GPT 2、吾爱AI 3、 核桃 4、WeexAI 地址发布页 5、ai创作

SHELL脚本编程----netstat练习3-输出每个IP的连接数

描述 假设netstat命令运行的结果我们存储在nowcoder.txt里&#xff0c;格式如下&#xff1a; Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6160 0.0.0.0:* LISTEN tcp 0 0…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

txt大文件拆分(批量版)

之前的python程序只能拆分单个文件&#xff0c;这里重新加了个文件夹拆分的功能&#xff08;打包好的exe文件在文章末尾&#xff09; 使用步骤&#xff1a;运行代码–>把文件放到input文件夹里–>命令行界面回车–>output文件夹输出文件 outputPath "./output&q…

【Hadoop】-Hive客户端:HiveServer2 Beeline 与DataGrip DBeaver[14]

HiveServer2 & Beeline 一、HiveServer2服务 在启动Hive的时候&#xff0c;除了必备的Metastore服务外&#xff0c;我们前面提过有2种方式使用Hive&#xff1a; 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --…

一则 TCP 缓存超负荷导致的 MySQL 连接中断的案例分析

除了 MySQL 本身之外&#xff0c;如何分析定位其他因素的可能性&#xff1f; 作者&#xff1a;龚唐杰&#xff0c;爱可生 DBA 团队成员&#xff0c;主要负责 MySQL 技术支持&#xff0c;擅长 MySQL、PG、国产数据库。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使…

centos7使用源码安装方式redis

安装编译源码的工具gcc yum install -y gcc下载源码 源码下载地址 https://download.redis.io/releases/ 注意事项 不建议安装最新版本redis&#xff0c;所以我这里选择6.2.6版本 下载 wget https://download.redis.io/releases/redis-6.2.6.tar.gz解压 tar -zxvf redis-…

spark实验求TOP值

实验1&#xff1a;求TOP值 已知存在两个文本文件&#xff0c;file1.txt和file2.txt&#xff0c;内容分别如下&#xff1a; file1.txt 1,1768,50,155 2,1218, 600,211 3,2239,788,242 4,3101,28,599 5,4899,290,129 6,3110,54,1201 7,4436,259,877 8,2369,7890,27 fil…