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

ops/2024/9/22 19:08:30/

集群内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个 podtemplate: # 定义模板metadata:labels:run: my-dep-nginxspec: # 模板说明containers:- name: my-dep-nginximage: nginxresources: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-nginxlabels:run: my-dep-nginx
    spec:ports:- port: 80protocol: TCPselector: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
    
  • 现在已经注入成功了

http://www.ppmy.cn/ops/7585.html

相关文章

设计模式-构建者模式

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS二次开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 定义 特点 使用场景 优缺点 (1) 优点 …

09 SQL进阶 -- SQL高级处理 -- 窗口函数等

1. 窗口函数 1.1 窗口函数概念及基本的使用方法 窗口函数也称为 OLAP 函数。OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。 为了便于理解,称之为窗口函数。常规的 SELECT 语句都是对整张表进行查询,而窗口函数可以让我们有选择的去某…

抽象工厂模式

抽象工厂模式 定义&#xff1a; 为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候&#xff0c;可以从抽象工厂中选出相对系的系列来创建一个具体的工厂类别 示例&#xff1a; 动物有吃饭和说话的行为&#xff0c;小猫吃猫粮并说喵星语&#xff0c;小…

校园水电能源智能化管理系统

校园作为大量人员集聚的场所&#xff0c;水电能源的高效管理对于降低运营成本、保障安全稳定供应以及推动可持续发展至关重要。校园水电能源智能化管理系统应运而生&#xff0c;通过先进技术的应用&#xff0c;实现了对校园水电资源的智能监控、计量和管理。本文将从系统背景、…

windows@允许挂载http链接@挂载局域网http链接

文章目录 资源管理器挂载网络驱动器&#x1f47a;允许http链接映射为磁盘驱动器&#x1f60a;可选更改:文件大小限制 刷新使配置生效重启webclient服务 基本操作执行映射取消映射 资源管理器挂载网络驱动器&#x1f47a; 对于共享文件夹(smb)协议(\\server\sharefolder)类型的…

[转载] 在IIS上启用https的免费ssl证书使用教程

一、申请证书 数字证书管理服务&#xff08;原SSL证书&#xff09;_SSL数字证书_HTTPS加密_服务器证书_CA认证-阿里云 二、添加证书 1、在控制台上做如下操作&#xff1a;文件》添加/删除管理单元》可用的管理单元》证书》添加》确定。 2、在证书管理单元中选择&#xff1a;…

基于SpringCloudAlibaba+Sentinel的分布式限流设计

胡弦&#xff0c;视频号2023年度优秀创作者&#xff0c;互联网大厂P8技术专家&#xff0c;Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者&#xff0c;资深架构师&#xff0c;技术负责人&#xff0c;极客时间训练营讲师&#xff0c;四…

【数据结构】霍夫曼树

1.概念 霍夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。在霍夫曼树中&#xff0c;叶子节点的权值通常代表字符出现的频率&#xff0c;非叶子节点的权值是其子节点权值的和。霍夫曼树广泛应用于数据压缩…