k8s服务发现之使用 HostAliases 向 Pod /etc/hosts 文件添加条目

这篇具有很好参考价值的文章主要介绍了k8s服务发现之使用 HostAliases 向 Pod /etc/hosts 文件添加条目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

某些情况下,DNS 或者其他的域名解析方法可能不太适用,您需要配置 /etc/hosts 文件,在Linux下是比较容易做到的,在 Kubernetes 中,可以通过 Pod 定义中的 hostAliases 字段向 Pod 的 /etc/hosts 添加条目。

适用其他方法修改 Pod 的 /etc/hosts 文件是不被推荐的,因为 kubelet 可能在重新创建 Pod 时,就会覆盖这些修改。

默认 hosts 文件内容

让我们从一个 Nginx Pod 开始,该 Pod 被分配一个 IP:

kubectl run nginx --image nginx

输出结果

pod/nginx created

检查 Pod IP:

kubectl get pods --output=wide

输出结果:

NAME                        READY   STATUS      RESTARTS        AGE     IP              NODE                         NOMINATED NODE   READINESS GATES
nginx                       1/1     Running     0               79s     10.244.4.3      centos-automk8sworker-7019   <none>           <none>

主机文件的内容如下所示:

kubectl exec nginx -- cat /etc/hosts

输出内容

# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.200.0.4	nginx

默认情况下,hosts 文件只包含 IPv4 和 IPv6 的样板内容,像 localhost 和主机名称。

通过 HostAliases 增加额外条目

除了默认的样板内容,你可以向 hosts 文件添加额外的条目。 例如,要将 foo.localbar.local 解析为 127.0.0.1, 将 foo.remotebar.remote 解析为 10.1.2.3,你可以在 .spec.hostAliases 下为 Pod 配置 HostAliases。

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  restartPolicy: Never
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
  containers:
  - name: cat-hosts
    image: busybox:1.28
    command:
    - cat
    args:
    - "/etc/hosts"

使用以下命令用此配置启动 Pod

kubectl apply -f hostaliases-pod.yaml

输出结果

pod/hostaliases-pod created

检查 Pod 详情,查看其 IPv4 地址和状态:

[root@centos-AutomK8sMaster-7016 test]# kubectl get pod --output=wide 
NAME                        READY   STATUS      RESTARTS        AGE     IP              NODE                         NOMINATED NODE   READINESS GATES
hostaliases-pod             0/1     Completed   0               3m37s   10.244.4.5      centos-automk8sworker-7019   <none>           <none>

hosts 文件的内容看起来类似如下所示:

kubectl logs hostaliases-pod
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.4.5	hostaliases-pod

# Entries added by HostAliases.
127.0.0.1	foo.local	bar.local
10.1.2.3	foo.remote	bar.remote

在最下面看到我们添加的条目了

为什么 kubelet 管理 hosts 文件?

kubelet 管理每个Pod 容器的 hosts 文件,以防止容器运行时在容器已经启动后修改文件。 由于历史原因,Kubernetes 总是使用 Docker Engine 作为其容器运行时,而 Docker Engine 将在容器启动后修改 /etc/hosts 文件。

当前的 Kubernetes 可以使用多种容器运行时;即便如此,kubelet 管理在每个容器中创建 hosts文件, 以便你使用任何容器运行时运行容器时,结果都符合预期。

PS:

请避免手工更改容器内的 hosts 文件内容。

如果你对 hosts 文件做了手工修改,这些修改都会在容器退出时丢失。文章来源地址https://www.toymoban.com/news/detail-611466.html

到了这里,关于k8s服务发现之使用 HostAliases 向 Pod /etc/hosts 文件添加条目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s服务发现之第五弹--使用 Service 连接到应用

    通过前面教程的学习,我们已经可以将容器化的应用程序在 Kubernetes 中运行起来,并且发布到 Kubernetes 内/外的网络上。 通常,Docker 使用一种 host-private 的联网方式,在此情况下,只有两个容器都在同一个节点(主机)上时,一个容器才可以通过网络连接另一个容器。为了使

    2024年02月15日
    浏览(39)
  • Spring Cloud Gateway使用K8S (Kubernetes)的云原生服务发现

    Spring Cloud Gateway通常使用注册中心作为服务发现,但在Kubernetes里面,由于K8S已经集成了服务注册与发现功能,不必要再另外使用注册中心了,而且,还可以使用K8S的服务监控对服务进行监控。 本来按照网上教程,升级到最新版的springboot3.x,结果发现无法发现服务。后来按着

    2024年04月22日
    浏览(44)
  • k8s 通过配置 hostAliases 来进行域名解析

    在 Kubernetes (K8s) 中,hostAliases 是一种用于在 Pod 中配置主机名与 IP 地址映射的机制。通过使用 hostAliases,你可以将指定的主机名映射到 Pod 所在节点的 IP 地址,从而实现对主机名的自定义解析。这对于一些特定的用例,比如与主机上的外部资源进行交互,非常有用。 以下是一

    2024年02月08日
    浏览(48)
  • 【Spring Cloud Kubernetes】使用k8s原生service实现服务注册和发现

    @TOC 现在微服务开发模式应用的越来越广泛,注册中心 Eureka 也逐渐被其它注册中心产品替代,比如阿里出品的 Nacos 。随着云原生相关技术的普及, k8s 迅猛发展,我们把 K8s 中的 Pod 暴露给外部访问,通过少了 Service ,这也是今天的主角。 有没有发现,其实 Service 已经解决了

    2024年02月12日
    浏览(77)
  • (四)k8s实战-服务发现

    1、配置文件 2、命令操作 3、代理 k8s 外部服务 实现方式: 编写 service 配置文件时,不指定 selector 属性 自己创建 endpoint endpoint 配置文件: 各环境访问名称统一 访问 k8s 集群外的其他服务 项目迁移 4、反向代理外部域名 5、常用类型 ClusterIP 只能在集群内部使用,不配置类型

    2024年02月11日
    浏览(37)
  • k8s&service服务发现

    Service的功能::::::::::::::::::::: 服务发现:发现pod的变化,宕机的不转发 对外发布:让外部访问到内部,稳定的对外映射一个端口号nodeport Service有两个ip,第一个是service内部访问用的 一个是向外提供服务的clusterip 定位dns,用dns解析  实例文件:

    2024年02月03日
    浏览(53)
  • K8S | Service服务发现

    服务发现与负载均衡。 在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问; 对于测试「Tes」环境或者生产「Pro」环境,出于安全或者环境隔离性来考虑,在正常情况下只会开放

    2024年02月14日
    浏览(60)
  • K8s暴露服务-服务发现(三种常用方式)

    NodePort:后期维护困难,不支持虚拟路径 LoadBlancer:需要云厂商支持,有局限性 ClusterIP:只能在集群内部访问 Ingress:灵活,无依赖 前三种方式都是在service的维度提供的,service的作用体现在两个方面,对集群内部它不断跟踪pod变化,更新endpoint中对应的pod的对象,提供IP不断变化

    2024年02月15日
    浏览(54)
  • 持续集成部署-k8s-服务发现-Ingress

    Ingress 是 Kubernetes 中的一个核心组件,用于管理和暴露集群内部的服务到集群外部。它充当了一个入口( Gateway )的角色,可以将外部流量路由到集群内部的服务。 Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由

    2024年02月08日
    浏览(61)
  • K8s进阶之路-命名空间级-服务发现 :

    服务发现: Service(东西流量):集群内网络通信、负载均衡(四层负载)内部跨节点,节点与节点之间的通信,以及pod与pod之间的通信,用Service暴露端口即可实现 Ingress(南北流量):将内部服务暴露外网访问的服务ingress-nginx,也就是nginx反向代理负载均衡服务(七层http负

    2024年02月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包