K8s: 集群内Pod通信机制之环境变量

k8s注入环境变量,解决开发环境,测试环境,生产环境管理混乱问题。统一时区问题。 k8s注入环境变量,解决开发环境,测试环境,生成环境管理混乱问题。统一时区问题。 阅读详情

集群内Pod通信机制之环境变量

  • Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS

1 ) 环境变量概述

  • 在Service里面通过label selector选择器去匹配到对应的pod
  • 然后把流量导给对应的pod进行这个service的一个服务提供
  • 也就是说你只要访问service的IP地址,就能获取后端pod提供的内容
  • 不用关心Pod到底在哪?它的ip是什么?,所以可以理解为它是一个固定的虚拟地址
  • 现在,我们更关心集群内部怎么进行通信的
  • 在集群内部,前端怎么访问这个后端,比如说我前端的APP要访问后端的微服务的这个容器
  • 写了service的地址之后,是怎么跟后端的service进行通信的
  • 也就是底层的实现环节,怎么找到它的地址
  • k8s 其实上涉及到服务发现的这个模式,就说我这个Service定义好了之后
  • 其他服务的Pod怎么知道这个service已经好了,然后去知道它的IP地址
  • 举一个例子
    • 一个名称为 “my-nginx” 的 Service 暴露了 TCP 端口 80
    • 同时给它分配了 Cluster IP 地址 10.1.180.155,这个 Service 生成了如下环境变量:
      MY_NGINX_PORT_80_TCP_PORT=80
      MY_NGINX_PORT_80_TCP_PROTO=tcp
      MY_NGINX_PORT_80_TCP_ADDR=10.1.180.155
      
  • 在环境变量这种模式里面,nginx会通过这种service环境变量注入的方式注入到pod容器里面
  • 这样的话容器在访问其他service的时候,就是通过service的名称
  • 它有一个规则的转化,然后访问对应的一个地址,上面只是一个说明下面进行实践

2 )环境变量实践

  • 注意:基于环境变量时,service要比pod要先创建,才能把这个环境变量写容器里面去

2.1 这里我们先反过来,先创建 deployment 再创建 service

  • 借用之前的 development 先运行起来

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-dep-nginx # 这个是 Deployment 对象的名称
    spec:
      selector:
        matchLabels: # 匹配标签
          run: my-dep-nginx # 运行匹配的 my-nginx 容器
      replicas: 2 # 2个副本,会创建 2个 pod
      template: # 定义模板
        metadata:
          labels:
            run: my-dep-nginx
        spec: # 模板说明
          containers:
          - name: my-dep-nginx
            image: nginx
            resources:
              limits:
                memory: "32Mi"
                cpu: "100m"
            ports:
            - containerPort: 80
    
  • $ kubectl apply -f dep-my-nginx.yaml 创建pod

    deployment.apps/my-dep-nginx created
    
  • $ kubectl get po -w | grep my-dep 查看pod运行状态

    my-dep-nginx-7776c5d85c-gfzxd   1/1     Running            0               37s
    my-dep-nginx-7776c5d85c-w8bqq   1/1     Running            0               37s
    

2.2 再创建 service:svc-my-nginx.yaml

  • 创建 svc-my-nginx.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: my-svc-nginx
      labels:
        run: my-dep-nginx
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        run: my-dep-nginx
    
  • $ kubectl get svc 查看服务

    NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    kubernetes     ClusterIP   10.1.0.1       <none>        443/TCP   4d1h
    my-svc-nginx   ClusterIP   10.1.237.190   <none>        80/TCP    23m
    
  • 好现在服务已经运行起来了, 现在进入pod容器中

  • $ kubectl exec -it my-dep-nginx-7776c5d85c-w8bqq -- sh

  • $ printenv | grep MY_SVC

    • 现在看到,先创建 development 的 pod集群是看不到服务相关的环境变量的
    • 也就是没有注入成功

2.3 调整顺序,这时候已经有 service 了,删除 development, 重新启动 development

  • $ kubectl delete -f dep-my-nginx.yaml 先删除 development
    deployment.apps "my-dep-nginx" deleted
    
  • $ kubectl apply -f dep-my-nginx.yaml 在已有Service的情况下,重建 development
    deployment.apps/my-dep-nginx created
    
  • $ kubectl get po -w | grep my-dep 等待容器启动完成
    my-dep-nginx-7776c5d85c-fx9pt   1/1     Running            0                 115s
    my-dep-nginx-7776c5d85c-hktm2   1/1     Running            0                 115s
    
  • $ kubectl exec -it my-dep-nginx-7776c5d85c-fx9pt -- sh 进入其中之一
  • $ printenv | grep MY_SVC
    MY_SVC_NGINX_SERVICE_HOST=10.1.237.190
    MY_SVC_NGINX_SERVICE_PORT=80
    MY_SVC_NGINX_PORT=tcp://10.1.237.190:80
    MY_SVC_NGINX_PORT_80_TCP_ADDR=10.1.237.190
    MY_SVC_NGINX_PORT_80_TCP_PORT=80
    MY_SVC_NGINX_PORT_80_TCP_PROTO=tcp
    MY_SVC_NGINX_PORT_80_TCP=tcp://10.1.237.190:80
    
  • 现在已经注入成功了
自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信 一、Kubernetes简介 1、Kubernetes简介 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。 Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。 Kubernetes的好处: (1)隐藏资源管理和错误处理,用户仅需要关 阅读详情

相关推荐

K8S及pod相关介绍

K8S基本概念;Pod 概念;Kubernetes ⼯作流程;K8S 创建 Pod 流程;

m0_73907608的博客 2016

总结:K8S之环境变量

一、介绍 环境变量和普通的我们定义的变量其实含义类似的,想下我们Java类中普通的环境变量,一般作用是留给下面的方法去使用。 本文中单独说的环境变量差不多是系统的环境变量,比如linux中我们可以通过env命令查看所有的环境变量,如下图: 其中就有我们熟悉的:HOSTNAME。 那么我们大致能知道环境变量的用途:系统或程序中使用。 比如windows中的PATH,就是windows系统会使用,基于PATH去找执行文件。 比如linux中HOSTNAME,不仅linux系统会使用,用户可能也会

w2009211777的专栏 7598

K8S从懵圈到熟练 – 集群网络详解

阿里云K8S集群网络目前有两种方案,一种是flannel方案,另外一种是基于calico和弹性网卡eni的terway方案。Terway和flannel类似,不同的地方在于,terway支持Pod弹性网卡,以及NetworkPolicy功能。 今天这篇文章,我们以flannel为例,深入分析阿里云K8S集群网络的实现方法。我会从两个角度去分析,一个是网络的搭建过程,另外一个是基于网络的通信。我们的...

weixin_44774358的博客 3533

k8s环境变量的使用

k8s环境变量创建方式有两种:secret方式和configmap方式

monkey_90ge的专栏 4589

K8s 之 Pod 入门

k8s Pod

高飞的博客 30万+

K8S中的环境变量

K8S中的环境变量

叱咤少帅的博客 1537

K8s: 集群内Pod通信机制之DNS

有了这样的参数之后,我们创建的pod,它就会自带 DNS这个域名,它的hostname 就会变成一个 full qualified 这么一个域名。hostname,就是我的主机名, 这个pod我可以认为它是一个最小的主机,这个主机已经有个名字了,比如说叫 busybox1。有了上面全的域名地址,就可以访问到它这个pod了,通过这种方式,K8s提供了pod的dns注册机制。然后域名就是你的公司名称,集群的名称,可以是你公司的域名,比如 x.com。通过这个域名,能够让别人通过这个DNS服务来找到我。

Wang的专栏 2030

k8s在pod中使用环境变量

方式一.通过变量env,引用 ConfigMap中的变量 1.创建ConfigMap vim cm-appvars.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-appvars data: apploglevel: info appdatadir: /opt/data/ 创建命令,并查看创建结果(排查错误使用) kubectl create configmap cm-appvars kubectl descirbe

极客栈 3408

【kubernetes】关于云原生之k8s集群的pod理论详解

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。

zzzxxx520369的博客 1446

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 915

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

集群内的任何位置,寻址到虚拟 IP 的流量都将负载均衡到与Service关联的一组Pod。container模式指定新创建的Docker容器和已经存在的一个容器共享一个网络命名空间,也就是说新创建的Docker容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。的 Docker 容器。Pod 中的容器都具有通过分配给 Pod 的网络命名空间分配的相同 IP 地址和端口空间,并且可以。来管理一组 Pod 的状态,允许我们跟踪一组随时间动态变化的 Pod 的IP 地址。

m0_60511809的博客 8290

服务器报错:“Unhealthy status reported by this UEFI driver without specific error message”.. 记录解决过程

服务器开机报错:Unhealthy status reported by this UEFI driver without specific...

ayychiguoguo的博客 4399

Kubernetes 集群中 Pod 的内部通信机制

Kubernetes 中的 Pod 通信机制通过网络插件、Service、负载均衡器和网络策略等技术,实现了高效、安全和灵活的微服务通信。无论是在同一 Pod 中还是跨 Pod、跨节点甚至跨区域,Kubernetes 都提供了一整套完备的解决方案,帮助开发者管理分布式系统中的通信复杂性。在实际项目中,理解和合理配置 Kubernetes 的通信机制,不仅可以提升系统的性能和可扩展性,还能通过保障通信安全性。

孔乙己的博客 1113

NVMe-MI --- Message Servicing Model(消息服务模型)

本文主要介绍NVMe-MI消息服务模型,两个主要类别是请求消息和响应消息。并介绍带外机制消息服务状态机。

智小星的博客 2014

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 436

【云原生】详解Kubernetes、详解k8s,什么是k8s,k8s有什么用;k8s集群是什么、有什么用?

Kubernetes 是Google开源的分布式容器管理平台,是为了更方便的在服务器中管理我们的容器化应用。Kubernetes 简称 K8S,为什么会有这个称号?因为K和S是 Kubernetes 首字母和尾字母,而K和S中间有八个字母,所以简称 K8S,加上 Kubernetes比较绕口,所以一般使用简称 K8S。Kubernetes 即是一款容器编排工具,也是一个全新的基于容器技术的分布式架构方案,在基于Docker的基础上,可以提供从 一系列服务,提高了容器集群管理的便捷性。大家可以先看一下,下面一

点赞的都能无bug通过! 3979

【2.12】基于FPGA的Gardner环开发5——闭环反馈,获得完整gardner环

本文介绍了Gardner定时恢复算法在FPGA上的实现过程。首先回顾MATLAB程序中Gardner环的闭环反馈机制,重点分析了环路滤波器输出变量w的处理流程。随后详细阐述了FPGA实现的Verilog设计步骤,包括三个核心模块:1)y_temp=q0-w计算模块,实现反馈变量处理;2)uk=2*q0计算模块,生成插值系数;3)插值计算模块,根据使能信号执行线性插值运算。设计通过引入使能信号控制插值更新时机,采用定点数运算处理数据,并包含负数保护机制确保计算稳定性。文章提供了完整的Verilog代码实现,展

fpga/matlab/simulink算法仿真工程 136

【Kubernetes】k8s集群的pod基础

pod基础

weixin_68840588的博客 1049

PCIe-Orders set Blocks之symbol对齐

有序集的使用场合很多,如在链路link阶段,进入polling后,便开始有序集的发送。一个 Ordered Set Block 包含一个同步头,后跟一个有序集。多通道链路的所有 Lane 必须同时传输相同的有序集,而且有序集的第一个符号定义了有序集的类型。但在PCIE中,8GT/s及以上的速率,采用的是128b/130b编码。128-bit是想要传输的payload,实际会传输130-bit,多出来的2-bit就是sync header。Block有两种,通过Sync header区分:10b:表示data

weixin_44700185的博客 813

【单片机】STM32F103C8T6 最小系统板原理图

STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。LQFP48封装(Low-profile Quad Flat Package,48引脚)SRAM(静态随机访问存储器):20 KB。支持JTAG调试和编程接口(可选)多个通用输入/输出口(GPIO)USB接口(用于USB设备模式)内置调试和编程接口(SWD)

q742971636的博客 6万+

3.Kubernetes—pod通信网络原理

4、外部网络和 pod 之间通信容器中 pod 共享同一个 IP 地址。故同一个 Pod 中 Container 可以做到直接通过 localhost 直接通信。pause 容器启动之前,会为容器创建虚拟一对 ethernet 接口,一个保留在宿主机 vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,另一端出来。任何 Pod 连接到该网桥的 Pod 都可以收发数据。

weixin_45246215的博客 4384

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Kubernetes】k8s集群Pod概述

例如:用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。

qq_54188720的博客 1985

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Kubernetes—k8s集群的pod理论详解

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能例如:用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等pause容器(基础容器/父容器/根容器)给Pod容器组做环境初始化。

aran2002的博客 1734

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: K8s: Service对象以及与Pod之间的通信关系
下一篇: K8s: 集群内Pod通信机制之DNS
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值