指定命名空间后,Kubernetes Pod无法联系另一个Pod

时间:2019-11-18 14:02:10

标签: kubernetes kubernetes-pod

我在centOS 7上使用Kubernetes。

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:13:49Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

我确实通过使用以下 prod_www_pod.yaml 将Nginx Pod部署在“生产”命名空间上:

apiVersion: v1
kind: Pod
metadata:
  name: www
  namespace: production
  labels:
    app: www
spec:
  containers:
  - name: nginx
    image: myrepo:5001/nginx

我已经部署了第二个( prod_debug.yaml ),以检查一切是否正常运行。

apiVersion: v1
kind: Pod
metadata:
  name: debug
  namespace: production
spec:
  containers:
  - name: debug
    image: myrepo:5001/debug:latest
    command:
    - "sleep"
    - "10000"

我可以在正确的名称空间上看到

[plaurent@kubmaster deployment]$ kubectl get po
No resources found in default namespace.
[plaurent@kubmaster deployment]$ kubectl get po -n production
NAME    READY   STATUS    RESTARTS   AGE
debug   1/1     Running   0          94s
www     1/1     Running   0          3m57s

但是当尝试从调试中卷曲www时,我有:

[plaurent@kubmaster deployment]$ kubectl exec -it -n production debug -- sh
/ # curl www
Nothing there
/ # 

kubectl delete po debug www -n production之后,除了删除元数据上指定的命名空间外,我尝试安装该文件。

[plaurent@kubmaster deployment]$ kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
debug   1/1     Running   0          10s
www     1/1     Running   0          18s

并且当尝试通过调试联系www时,它运行良好。

[plaurent@kubmaster deployment]$ kubectl exec -it debug -- sh
/ # curl www
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
/ # 

有人可以指出正确的方向吗?

此致

皮埃尔

2 个答案:

答案 0 :(得分:0)

除非通过hostnamesubdomain进行了配置,否则您无法通过dns访问Pod,并且达到目的的方式也不尽相同。

www命名空间中可能有一个名为default的服务正在将请求转发到pod,但是在production命名空间中却没有该服务。

要确认我的意思,请在您的kubectl get svcdefault命名空间中运行production

如果我对,请通过kubectl expose pod ...公开您的广告连播,或通过Yaml文件创建服务。

现在,请注意,创建广告连播不是一个好主意。最好使用1个副本创建e部署。

答案 1 :(得分:0)

这在默认名称空间而不是生产名称空间中有效,因为默认情况下如何配置kube-dns。 default ndots config of the kube-dns recognises default.svc.cluster.local。因此,当使用默认名称空间时,默认值允许kube-dns定位www。但是,由于df[df['Category']==" "] = np.NaN df = df['Category'].fillna(method='ffill') col = ['Category'] df.loc[:,col] = df.loc[:,col].ffill() df.loc[:,['Category']] = df.loc[:,['Category']].ffill() df = df.set_index(df.columns[0]) col = ['Category'] df.loc[:,col] = df.loc[:,col].ffill() 没有默认条目,因此名称解析失败。

您需要配置服务以在生产名称空间中公开www窗格(最好使用headless service)。