问题描述
我正在使用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 (将#修改为@)