东莞正规网站建设,软件下载平台,网站优化怎样做,兰州h5页面制作k8s-Pod域名学习总结
大纲 k8s内置DNS服务 配置Pod的域名服务 CornDNS配置 默认Pod的域名 自定义Pod的域名 实战需求 1 Pod有自己的域名 2 集群内部的Pod可以通过域名访问其他的Pod
基础准备#xff1a;
1 k8s 集群版本1.17 k8s内置DNS服务
k8s1.17安装完成后自动创建…k8s-Pod域名学习总结
大纲 k8s内置DNS服务 配置Pod的域名服务 CornDNS配置 默认Pod的域名 自定义Pod的域名 实战需求 1 Pod有自己的域名 2 集群内部的Pod可以通过域名访问其他的Pod
基础准备
1 k8s 集群版本1.17 k8s内置DNS服务
k8s1.17安装完成后自动创建 CoreDNS服务k8s会为 Service 和 Pod 创建 DNS 记录k8s集群内访问Service或Pod可以使用域名而非ip
Kubelet 为每个 Pod 配置/etc/resolv.conf文件
配置Pod的域名服务
配置Pod DNS服务
可以使用 dnsPolicy 来配置Pod 的 DNS 策略
Default: Pod 从运行所在的节点继承名称解析配置。注意 这里的Default 不是默认的 DNS 策略。如果未明确指定 dnsPolicy则使用 “ClusterFirst”ClusterFirst: 与配置的集群域后缀不匹配的任何 DNS 查询例如 “www.kubernetes.io” 都会由 DNS 服务器转发到上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。 参阅相关讨论 了解在这些场景中如何处理 DNS 查询的信息。默认DNS 策略ClusterFirstWithHostNet: 对于以 hostNetwork 方式运行的 Pod应将其 DNS 策略显式设置为 “ClusterFirstWithHostNet”。否则以 hostNetwork 方式和 “ClusterFirst” 策略运行的 Pod 将会做出回退至 “Default” 策略的行为。None: 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 dnsConfig 字段所提供的 DNS 设置 spec:imagePullSecrets:- name: myaliyunsecretrestartPolicy: Always# 配置dns策略dnsPolicy: Default containers:- image: registry.cn-hangzhou.aliyuncs.com/jimliu/order-service:latestname: order-service可以使用 dnsConfig 来配置Pod的DNS
dnsPolicy为任意策略时都可以设置但是当dnsPolicy“None“时必须设置。dnsPolicy有三个配置项
nameservers用于域名解析的DNS服务器列表,Linux 最多三个searches配置DNS 搜索域options配置其他可选DNS参数 最多可以设置3个。当Pod的dinsPolicy“None“时该nameserver列表必须包含至少一个IP地址配置的nameserver列表会与系统自动设置的nameserver进行合并和去重 apiVersion: v1kind: Podmetadata:name: custom-dnsspec:containers:- name: tomcat-runimage: tomcatdnsPolicy: None # Kubernetes 环境中的 DNS 设置 使用pod自定DSNdnsConfig:nameservers: # DNS服务器列表- 8.8.8.8searches: # 配置DNS 搜索域- mynamespace.svc.cluster-domain.example options:- name: ndots - value: 1- name: edns0配置dnsConfig后 Pod容器内的 /etc/resolv.conf 就会使用以上配置的内容
配置Pod中的 域名映射
可以使用 hostAliases 类型直接配置 /etc/hosts 实现本地域名映射
hostAliases: - ip: 192.168.0.206hostnames: - app-server-1.medcrab.com 配置CoreDNS
k8s 1.70默认使用CoreDNS 作为DNS服务 如果有一些集群外并且是自己使用的内网域名除了可以使用在Pod yaml中使用hostAliases 配置外还可以在CoreDNS 中配
可以看到Pod中无法访问自己的内网域名
可能需要安装ping
apt-get install inetutils-pingkubectl edit configmap coredns -n kube-system 编辑coredns配置
添加
hosts {192.168.0.206 app-server-1.medcrab.comfallthrough
}再次访问域名 成功 注意 Pod yaml中 dnsPolicy 至少是 ClusterFirst
其他关于coredns的配置 可参考官方文档 https://coredns.io/
默认Pod的域名
在默认情况下 k8s集群会自动给Pod创建域名集群内部Pod可以使用域名访问其他Pod
Pod默认的域名格式为[pod ip].[namespace].pod.[cluster-domain]
[pod ip] 需要用 “-” 替换 “.” 号[namespace] 为Pod所在的命名空间[cluster-domain] 默认为 cluster.local
例如k8s集群default命名空间中有如下pod: my-quarkus-demo 则Pod my-quarkus-demo 的域名
10-244-1-21.default.pod.cluster.local 进入另外一个Pod 验证my-quarkus-demo 的域名 域名验证成功
可能需要安装的软件 nslookup curl
apt-get update
apt-get install dnsutils
apt-get install curl自定义Pod的域名
默认使用ip的方式不利于正式的生产环境。(Pod的切换可能会导致IP的变化)
可以在Pod yaml配置中设置hostname字段定义容器环境的主机名 并设置subdomain字段定义容器环境的子域名。
spec: hostname: 主机名称subdomain: 子域名部署Pod后此时的域名格式为[hostname].[subdomain].[namespace].svc.[cluster-domain]
[hostname] yaml中配置的hostname[subdomain] yaml中配置的subdomain[namespace] 为Pod所在的命名空间[cluster-domain] 默认为 cluster.local
例如k8s集群default命名空间中有如下pod: order-service-pod
此时pod域名为
order-service-pod.medcrabk8s-inner-order.default.svc.cluster.local进入pod内部查看 /etc/hosts文件 要想在K8S集群内部使用自定义的域名访问 还需要创建一个 Headless Services 无头服务
headless-service.yaml内容如下
apiVersion: v1
kind: Service
metadata: name: medcrabk8s-inner-order # 注意name为 pod中 subdomain 的名称
spec:selector: app: order-serviceclusterIP: None #注意 clusterIP 为Noneports: - port: 5555 进入另外一个Pod 验证order-service-pod 的域名 验证成功