K8S服务访问集群外域名

1,656 阅读2分钟

问题描述

我在用argo-workflow调试的CI流水线,需要访问git仓库git.xxx.com获取密码一开始是访问不通的,会报无法解析域名。

查看k8s的官方文档如下:

Pod 的 DNS 策略 

DNS 策略可以逐个 Pod 来设定。目前 Kubernetes 支持以下特定 Pod 的 DNS 策略。 这些策略可以在 Pod 规约中的 dnsPolicy 字段设置:

  • "Default": Pod 从运行所在的节点继承名称解析配置。参考 相关讨论 获取更多信息。
  • "ClusterFirst": 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io") 都将转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。 参阅相关讨论 了解在这些场景中如何处理 DNS 查询的信息。
  • "ClusterFirstWithHostNet":对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略 "ClusterFirstWithHostNet"。
  • "None": 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 dnsConfig 字段 所提供的 DNS 设置。 参见 Pod 的 DNS 配置节。

可以知道我们默认的DNS策略是ClusterFirst,只能访问集群内服务。

当您的应用Pod不需要访问集群内的其它服务,只需要通过云DNS来做解析,也不希望DNS解析经过CoreDNS,可以采用dnsPolicy: Default策略。配置完成后问题解决。

but,后面我这个Pod又需要访问集群内的其他服务,dnsPolicy: Default策略下就不行了,如何解决此问题呢?

解决方案

如果只需要解析一个集群外域名,最简单的办法是自定义hosts文件;多域名的话需要修改coredns修改转发域。

kubernetes.io/docs/tasks/… 参照样列配置了下hostAliases就ok了。

拓展

修改coredns修改转发域

参见: kubernetes.io/docs/tasks/…

可以参考文章: www.cnblogs.com/lbjstill/p/…

报错 fatal: could not read Username for 'gitee.com': No such device or address

在请求串中加入身份信息即可: 格式

  copyhttps://[username]:[password]@gitee.com/project.git

直接访问IP,会报SSL错误

https 是要求请求的 hostname 和 ssl 证书匹配,直接请求 ip 的 hostname 就是 ip 的会和 ssl 证书不匹配。

www.kaspersky.com.cn/resource-ce…