首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openshift源荚不能通过服务名称访问其他荚。

Openshift源荚不能通过服务名称访问其他荚。
EN

Stack Overflow用户
提问于 2017-07-21 11:26:34
回答 5查看 2.1K关注 0票数 1

我尝试过两种不同的应用程序,它们都由需要连接到关系数据库的web应用程序前端组成。

在这两种情况下,前端应用程序都无法连接到数据库。在这两种情况下,数据库都是作为容器(pod)在OpenShift中运行的。web应用程序使用服务名称作为url。这两个应用程序都在其他OpenShift环境中工作。

版本

  • OpenShift硕士: v1.5.1+7b451fc
  • 库伯奈特斯大师: v1.5.2+43a9be4
  • 使用Ansible Openshift安装
  • 单节点,此节点上有主节点
  • 主机操作系统: CentOS 7最小

我不知道如何在OpenShift中调试这个问题。我唯一能够从web到达db pod的方法是使用集群ip地址。

EN

回答 5

Stack Overflow用户

发布于 2017-07-27 09:20:12

为了使内部DNS解析工作,您需要确保dnsmasq.service正在运行,/etc/resolv.conf包含OCP节点本身的IP地址,而不是其他DNS服务器(这些服务器应该在/etc/dnsmasq.d/origin-upstream-dns.conf中)。

示例:

代码语言:javascript
复制
# 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脚本

代码语言:javascript
复制
# 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)

代码语言:javascript
复制
# 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。尝试重新启动整个网络,例如:

代码语言:javascript
复制
# systemctl restart network.service

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2017-07-25 19:09:14

我一直面临着使用SkyDNS (例如phpMyAdmin )连接到数据库的问题,作为一种解决办法,我尝试输入ClusterIP而不是SkyDNS名称,它成功了,您是否尝试过使用服务ClusterIP?

票数 0
EN

Stack Overflow用户

发布于 2021-07-25 02:49:57

最后,我们将openshift从4.5.3升级到4.5.7,并观察了它的状态。

看起来这是SkyDNS问题,我不知道这是否会在4.5.7之后得到解决。

如果DNS请求失败或被解析,下面的命令将通知您是否存在。尝试在堡垒节点上运行。

Sticky (本地DNS查询)

代码语言:javascript
复制
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查询,查看它们是否给出了与上面相同的结果)

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45236477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档