• KubernetesService介绍服务发现


    Kubernetes-Service介绍(二)-服务发现

     

    前言

    本篇是Kubernetes第九篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。

    Kubernetes系列文章:
    1. Kubernetes介绍
    2. Kubernetes环境搭建
    3. Kubernetes-kubectl介绍
    4. Kubernetes-Pod介绍(-)
    5. Kubernetes-Pod介绍(二)-生命周期
    6. Kubernetes-Pod介绍(三)-Pod调度
    7. Kubernetes-Pod介绍(四)-Deployment
    8. Kubernetes-Service介绍(一)-基本概念

    服务发现

    Kubernetes提供两种客户端以固定方式获取后端访问地址的方式:环境变量和DNS方式。

    环境变量

    该实验以上文中的nginx-deployment.yaml和nginx-service.yaml为基础;

    1. 新建一个Pod资源,文件名为nginx-pod.yaml;
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-deployment
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
          - containerPort: 80
    
    1. 启动该资源;
    kubectl apply -f nginx-pod.yaml
    
    1. 进入容器内部,查看系统的环境变量;
    #进入容器内部
    kubectl exec -it nginx-deployment -- /bin/bash
    #查看环境变量
    env | grep NGINX
    
    image.pngimage.png
    1. 通过环境变量访问服务信息;
    curl http://${NGINX_SERVICE_SERVICE_HOST}
    
    image.pngimage.png
    DNS方式
    1. 通过DNS解析方式在容器内部访问;
    curl http://nginx-service.default.svc.cluster.local
    
    image.pngimage.png

    相比于环境变量来说,DNS域名格式的Service名称提供的稳定、不变的访问地址,可以简化客户端的应用配置,是Kubernetes推荐的方式。当Service以DNS形式进行访问的时候,需要在集群中存在一个DNS服务器来完成域名到ClusterIP的地址解析工作,kubeadm在初始化的时候已经完kube-dns的安装,这个里要注意一个问题,就是使用busybox解析Service时候,最新版本是有问题的,我采用了1.28.3版本,对于服务中心中是否安装kube-dns可以通过以下方式检查:

    #检查deployment
    kubectl get deployment --namespace=kube-system
    #检查service
    kubectl get services --namespace=kube-system
    

    Service在Kubernetes中遵守DNS命名规范,Service的DNS域名表示方法为servicename.namespace.svc.clusterdomain,其中servicename为服务名称,namespace为所在的名空间,clusterdomain为Kubernetes中集群设置的域名后缀,此外如果Service定义中设置了名称,该端口会拥有一个DNS域名,在DNS服务器中保存格式为:_portname._protocol.servicename.namespace.svc.clusterdomain,其值为端口号的数值。

    imgimg

    Pod的DNS相关特征

    Pod作为集群中提供服务的实体,也可以设置DNS域名,Kubernetes为Pod使用的DNS策略提供很多种方式。

    Pod的DNS

    对于Pod来说,Kubernetes会为其设置一个pod-ip.namespace.pod.cluster-domain格式的DNS域名,其中Pod的IP需要使用-替换.,我们通过nslookup来证明一下;

    1. 查看Pod的IP信息,我们使用niginx-deployment的Pod为案例;
    kubectl get pod -o wide
    
    image.pngimage.png
    1. 使用nslookup进行验证;
    kubectl exec busybox -- nslookup 10-100-1-103.default.pod.cluster.local
    
    image.pngimage.png

    对于Deployment和Daement类型的创建的Pod来说,Kubernetes会为每个Pod设置一个DNS域名,格式为pod-ip.deployment-name/daement-name.namespace.svc.cluster-domain,Pod的IP也需要使用-替换.

    为Pod设置hostname和subdomain

    当前,创建Pod时其主机名取自Pod的metadata.name,在定义Pod的yaml文件中包含一个可选的 hostname 字段,可以用来指定Pod的主机名。 当这个字段被设置时,它将优先于Pod的名字成为该 Pod 的主机名。此外还有一个字段subdomain 字段,可以用来指定 Pod的子域名。

    1. 删除所有Pod;
    kubectl delete -f nginx-pod.yaml
    
    1. 创建busybox-headless-service.yaml文件,这里Headless Service与Pod子域名保持一致,这样子DNS服务器才会自动创建响应的DNS记录;
    apiVersion: v1
    kind: Service
    metadata:
      name: default-subdomain
    spec:
      selector:
        name: busybox
      clusterIP: None
      ports:
      - name: foo # 实际上不需要指定端口号
        port: 1234
        targetPort: 1234
    
    1. 创建nginx-pod.yaml文件;
    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox1
      labels:
        name: busybox
    spec:
      hostname: busybox-1
      subdomain: default-subdomain
      containers:
      - image: busybox:1.28.3
        command:
          - sleep
          - "3600"
        name: busybox
    
    1. 创建资源;
    kubectl apply -f busybox-headless-service.yaml
    kubectl apply -f busybox-pod1.yaml
    
    1. 进入Pod检查DNS是否写入,其他Pod就可以通过busybox-1.default-subdomain.default.svc.cluster.local来访问该Pod;
    kubectl exec -it busybox1 -- /bin/sh
    cat /etc/hosts
    
    image.pngimage.png
    Pod的DNS策略

    Kubernetes可以通过Pod中dnsPolicy属性指定DNS相关策略,目前支持以下四种策略:

    1. Default: 继承Pod所在的节点的域名解析设置;

    2. ClusterFirst: 优先使用Kubernetes提供的DNS服务(CoreDNS),将无法解析域名转发到系统配置的DNS服务器;

    3. ClusterFirstWithHostNet:适用于以hostNetWork方式运行的Pod;

    4. None:忽略Kubernetes提供的DNS配置,采用自定义的配置方式;

    Pod自定义DNS配置

    Kubernetes可以通过Pod的dnsConfig属性来自定义DNS相关配置,同时必须指定dnsPolicy为None。

    自定义DNS可以在dnsConfig指定以下属性:

    nameservers: 用于域名解析DNS服务列表,最多可以设置3个,当 Pod的dnsPolicy设置为none时, 列表必须至少包含一个 IP 地址。配置的nameserver列表与系统自动设置的nameserver自动合并去重;

    searches: 用于域名搜索的DNS域名后缀,最多设置6个,也会与系统自动设置的search列表合并去重;

    options:配置其他可选的DNS参数,以name或者name/value的形式表示,系统也会自动设置option列表合并去重;

    随笔分类 - DevOps

     

     
    摘要:前言 本篇是Kubernetes第十四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二) 阅读全文
    posted @ 2021-12-22 09:00 大魔王先生 阅读(130) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第十三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二) 阅读全文
    posted @ 2021-12-15 08:58 大魔王先生 阅读(274) 评论(0) 推荐(1)  编辑
     
    摘要:前言 本篇是Kubernetes第十二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二) 阅读全文
    posted @ 2021-12-06 08:59 大魔王先生 阅读(222) 评论(2) 推荐(1)  编辑
     
    摘要:前言 本篇是Kubernetes第十一篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战,此篇文章概念比较多,后续我会继续出一些网络相关实战以及原理探索篇。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kuber 阅读全文
    posted @ 2021-12-01 08:59 大魔王先生 阅读(282) 评论(2) 推荐(0)  编辑
     
    摘要:前言 本篇是Docker第十三篇,Docker的使用至此就介绍完成,接下来继续Kubernetes。 Docker系列文章: 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上Docker单机网络下Docker单机网络 阅读全文
    posted @ 2021-11-26 08:58 大魔王先生 阅读(414) 评论(0) 推荐(1)  编辑
     
    摘要:前言 前面的文章主要聚焦于单机网络上,对于生产环境而言,单机环境不满足高可用的特点,所以是不具备上生产的条件,因此在开始Docker Swarm篇的时候我们先来聊聊多机网络之间Docker的通信如何做,厦门主要介绍三种跨主机通信的方式。 Docker系列文章: 为什么要学习DockerDocker基 阅读全文
    posted @ 2021-11-12 08:54 大魔王先生 阅读(297) 评论(0) 推荐(1)  编辑
     
    摘要:前言 在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道。本文主要介绍Netfilter与iptables的原理。 什么是Netfilter Netfilter顾名思义就是网络过滤器,其主要功能就 阅读全文
    posted @ 2021-11-04 08:53 大魔王先生 阅读(170) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第十篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)- 阅读全文
    posted @ 2021-10-20 08:52 大魔王先生 阅读(850) 评论(3) 推荐(1)  编辑
     
    摘要:前言 本篇是Kubernetes第九篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)- 阅读全文
    posted @ 2021-10-18 09:19 大魔王先生 阅读(220) 评论(5) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第八篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。Pod篇暂时应该还缺少两篇,等Service和存储相关内容介绍以后,补充剩下的两篇,有状态的Pod会涉及这两块的内容。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建 阅读全文
    posted @ 2021-09-29 08:48 大魔王先生 阅读(396) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第七篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)- 阅读全文
    posted @ 2021-09-26 08:54 大魔王先生 阅读(212) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第六篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)- 阅读全文
    posted @ 2021-09-22 08:49 大魔王先生 阅读(267) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第五篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-) Pod生命周期 Pod对象自从其创建开 阅读全文
    posted @ 2021-09-15 08:42 大魔王先生 阅读(196) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍 阅读全文
    posted @ 2021-09-08 08:39 大魔王先生 阅读(229) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。本篇重要介绍kubectl的使用。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建 kubectl的核心功能在于通过 API Server 操作 Kubernetes 阅读全文
    posted @ 2021-09-06 08:50 大魔王先生 阅读(321) 评论(0) 推荐(0)  编辑
     
    摘要:前言 本篇是Kubernetes第二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍 Kubernetes搭建方式介绍和对比 Minikube Minikube是一种可以在本地轻松运行Kubernetes的工具。Minikube在 阅读全文
    posted @ 2021-09-02 08:47 大魔王先生 阅读(543) 评论(0) 推荐(3)  编辑
     
    摘要:前言 从本周开始以后尝试开始每周两更,本篇原计划是Docker多机网路,该篇文章有些卡文,所以先更新篇Kubernetes文章,关于Docker系列文章后面应该就剩下两篇了,等后续Kubernetes使用篇讲完以后,再开始做一些Docker相关深层次思考。 Docker系列文章: 为什么要学习Doc阅读全文
    posted @ 2021-08-18 08:47 大魔王先生 阅读(460) 评论(0) 推荐(0)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第十一篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网 阅读全文
    posted @ 2021-08-12 08:49 大魔王先生 阅读(797) 评论(0) 推荐(0)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第十篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络 阅读全文
    posted @ 2021-08-06 08:56 大魔王先生 阅读(476) 评论(0) 推荐(2)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第九篇,之前的文章里面或多或少的提到Docker的隔离技术,但是没有很清楚的去聊这个技术,但是经过这么多文章大家一定对Docker使用和概念有了一定的理解,接下来我们聊下底层一些技术,帮助大家解解惑,先从隔离技术开始吧。此外大家一定要按照我做的D 阅读全文
    posted @ 2021-07-30 09:23 大魔王先生 阅读(761) 评论(0) 推荐(0)  编辑
    摘要:前言 Docker系列文章: 此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上Docker单机网络下 基本命令 img 阅读全文
    posted @ 2021-07-21 08:50 大魔王先生 阅读(430) 评论(2) 推荐(1)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上 Docker网络初探 后台方式启动一个 阅读全文
    posted @ 2021-07-13 08:48 大魔王先生 阅读(557) 评论(6) 推荐(4)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第六篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷Dockerfile 网卡 网卡是一块计算机硬件。其特点是每一个网卡都有独立的MA 阅读全文
    posted @ 2021-07-09 08:55 大魔王先生 阅读(335) 评论(2) 推荐(1)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第五篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 Docker容器数据卷 什么是DockerFile Dockfile是一种被Docker程序解释的 阅读全文
    posted @ 2021-06-28 08:47 大魔王先生 阅读(183) 评论(0) 推荐(0)  编辑
     
    摘要:前言 Docker系列文章: 此篇是Docker系列的第四篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 为什么需要容器数据卷 数据的持久化,假设MySQL的数据存储在自身的镜像当中,如果将镜像删除的话, 阅读全文
    posted @ 2021-06-21 09:26 大魔王先生 阅读(415) 评论(0) 推荐(0)  编辑
     
    摘要:前言 Docker系列文章: 如果没有安装过Docker请参考本文最后部分,大家从现在开始一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么学习Docker Docker基本概念 什么是镜像 镜像就是一个可执行独立运行的软件包。包含应用运行所必须的文件和依赖包; 镜像可以理解为类或 阅读全文
    posted @ 2021-06-15 08:48 大魔王先生 阅读(738) 评论(1) 推荐(1)  编辑
     
    摘要:前言 Docker和Kubernetes是我最近在学习的内容,本来是去年的目标,由于工作比较忙,没有时间去学习,今年剩下的半年时间我会好好系统学习下相关的内容,最后在学习下Devops相关理念,希望最终能形成自己的一套思想; Docker系列文章: 为什么要学习Docker Docker基本组成 镜阅读全文
    posted @ 2021-06-09 12:06 大魔王先生 阅读(567) 评论(0) 推荐(2)  编辑
     
    摘要:一、前言 5W1H法则是在一次面试中学习到的,后来在工作也开始使用这种东西,虽然最后没去那家公司,但是也是学习到了,关注开这些东西以后,也发现了一些简化版的3W法则,最近公司也要搞Docekr,所以写篇博客来说说为什么要学习Docker。 二、What Docker 什么是Docker?Docker 阅读全文
    posted @ 2019-06-21 08:42 大魔王先生 阅读(1317) 评论(1) 推荐(0)  编辑
    作者:Leo_wl
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    版权信息
  • 相关阅读:
    一步步学敏捷开发:4、Scrum的3种角色
    一步步学敏捷开发:3、如何写用户故事
    一步步学敏捷开发:5. Scrum的4种会议
    一步步学敏捷开发:1、敏捷开发及Scrum介绍
    用户故事(User Story)
    对敏捷开发的一点理解
    Java学习之Iterator(迭代器)的一般用法 (转)
    希尔排序
    递归全排列字符串
    Java中equals和==的区别
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/15760012.html
Copyright © 2020-2023  润新知