kube-apiserver没有使用docker-dns

问题描述

我正在使用kubespray 2.14部署k8s集群。大多数配置是默认设置。我已经为kubectl配置了OIDC身份验证。我将Keycloak用作本地部署的身份验证服务器。流量由自签名证书保护,域keycloak.example.com由本地dns服务器解析。我为example.com域添加了一个CoreDNS外部区域。

kube-apiserver使用主机网络,因此默认情况下,CoreDNS不会解析名称。

只要我使用resolvconf_mode: host_resolvconf,一切正常。然后,将coredns地址添加到主机/etc/resolv.conf文件中,并且kube-apiserver使用CoreDNS解析自定义域。但是这种模式使我的集群非常不稳定。我不想深入研究这个问题,因为我已经花了太多时间。

要解决稳定性问题,我返回了默认的resolvconf_mode: docker_dns,但是我遇到了OIDC问题。

oidc authenticator: initializing plugin: Get https://keycloak.example.com/auth/realms/test/.well-known/openid-configuration: dial tcp: lookup keycloak.example.com on 8.8.8.8:53: no such host

kube-apiserver无法解析keycloak.example.com域,因为它从主机(8.8.8.8)中查询名称服务器。我认为它应该查询kubespray文档中所述的docker_dns:

https://github.com/kubernetes-sigs/kubespray/blob/master/docs/dns-stack.md

对于hostNetwork:真正的POD,k8s将使docker设置DNS设置。并非由k8s启动/管理的Docker容器也将使用这些docker选项。

有没有一种方法可以配置kubespray清单来解决此问题,而无需将名称服务器手动添加到每个主节点?这是我的库存配置部分:

kube_oidc_url: https://keycloak.example.com/auth/realms/test
kube_oidc_client_id: cluster

resolvconf_mode: docker_dns

upstream_dns_servers:
- 192.168.30.47

coredns_external_zones: &external_zones
- zones:
  - example.com:53
  nameservers:
  - 192.168.30.47
  cache: 5

nodelocaldns_external_zones: *external_zones

docker-dns.conf

[Service]
Environment="DOCKER_DNS_OPTIONS=\
    --dns 10.233.0.3 --dns 192.168.30.47 --dns 8.8.8.8  \
    --dns-search default.svc.cluster.local --dns-search svc.cluster.local  \
    --dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2  \
"

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...