我尝试过两种不同的应用程序,它们都由需要连接到关系数据库的web应用程序前端组成。
在这两种情况下,前端应用程序都无法连接到数据库。在这两种情况下,数据库都是作为容器(pod)在OpenShift中运行的。web应用程序使用服务名称作为url。这两个应用程序都在其他OpenShift环境中工作。
版本
我不知道如何在OpenShift中调试这个问题。我唯一能够从web到达db pod的方法是使用集群ip地址。
发布于 2017-07-27 09:20:12
为了使内部DNS解析工作,您需要确保dnsmasq.service正在运行,/etc/resolv.conf包含OCP节点本身的IP地址,而不是其他DNS服务器(这些服务器应该在/etc/dnsmasq.d/origin-upstream-dns.conf中)。
示例:
# ip a s eth0
...
inet 10.0.0.1/24
# cat /etc/resolv.conf
...
nameserver 10.0.0.1
# nameserver updated by /etc/NetworkManager/dispatcher.d/99-origin-dns.sh^^注意/etc/rupv.conf中的dispatcher脚本
# systemctl status dnsmasq.service
● dnsmasq.service - DNS caching server.
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running)
# cat /etc/dnsmasq.d/origin-dns.conf
no-resolv
domain-needed
server=/cluster.local/172.18.0.1^这个IP应该是kubernetes服务IP (oc get svc -n default)
# cat /etc/dnsmasq.d/origin-upstream-dns.conf
server=<dns ip 1>
server=<dns ip 2>如果OpenShift在某种OpenStack实例、AWS或类似的实例上运行,可能会发生cloud-init不触发NetworkManager dispatcher脚本的情况,因此resolv.conf不会被修改为指向dnsmasq。尝试重新启动整个网络,例如:
# systemctl restart network.service我希望这能帮到你。
发布于 2017-07-25 19:09:14
我一直面临着使用SkyDNS (例如phpMyAdmin )连接到数据库的问题,作为一种解决办法,我尝试输入ClusterIP而不是SkyDNS名称,它成功了,您是否尝试过使用服务ClusterIP?
发布于 2021-07-25 02:49:57
最后,我们将openshift从4.5.3升级到4.5.7,并观察了它的状态。
看起来这是SkyDNS问题,我不知道这是否会在4.5.7之后得到解决。
如果DNS请求失败或被解析,下面的命令将通知您是否存在。尝试在堡垒节点上运行。
Sticky (本地DNS查询)
DST_HOST=kubernetes.default.svc.cluster.local; while read wide; do pod=$(echo ${wide} | awk '{print $1}'); node=$(echo ${wide} | awk '{print $7}'); while read wide2; do ip=$(echo ${wide2} | awk '{print $6}'); node2=$(echo ${wide2} | awk '{print $7}'); echo -ne "`date +"%Y-%m-%d %T"` : ${pod}(${node}) querying ${DST_HOST} via ${ip}(${node2}): "; oc exec -n openshift-dns ${pod} -- dig ${DST_HOST} +short &>/dev/null; test "$?" -eq "0" && echo ok || echo failed; done < <(oc get pods -n openshift-dns -o wide --no-headers); done < <(oc get pods -n openshift-dns -o wide --no-headers)随机(喷射DNS查询,查看它们是否给出了与上面相同的结果)
DST_HOST=kubernetes.default.svc.cluster.local; while read wide; do pod=$(echo ${wide} | awk '{print $1}'); node=$(echo ${wide} | awk '{print $7}'); while read wide2; do ip=$(echo ${wide2} | awk '{print $6}'); node2=$(echo ${wide2} | awk '{print $7}'); echo -ne "`date +"%Y-%m-%d %T"` : ${pod}(${node}) querying ${DST_HOST} via ${ip}(${node2}): "; oc exec -n openshift-dns ${pod} -- dig @${ip} ${DST_HOST} -p 5353 +short &>/dev/null; test "$?" -eq "0" && echo ok || echo failed; done < <(oc get pods -n openshift-dns -o wide --no-headers); done < <(oc get pods -n openshift-dns -o wide --no-headers)https://stackoverflow.com/questions/45236477
复制相似问题