kubernetes - 通过自己的服务从pod请求到localhost无效

标签 kubernetes

我有一个名为foo的服务,带有一个foo pod的选择器:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: foo
  name: foo
  namespace: bar
spec:
  clusterIP: 172.20.166.230
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    name: foo
  sessionAffinity: None
  type: ClusterIP

我有一个名为foo的部署/ pods ,带有标签foo:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "3"
  generation: 3
  labels:
    name: foo
  name: foo
  namespace: bar
spec:
  selector:
    matchLabels:
      name: foo
  template:
    metadata:
      labels:
        name: foo
    spec:
      containers:
        image: my/image:tag
        imagePullPolicy: Always
        name: foo
        ports:
        - containerPort: 8080
          protocol: TCP
      dnsPolicy: ClusterFirst

我从foo容器向foo主机发出了请求,主机已解决,但请求没有通过:
$ curl -vvv foo:8080
* Rebuilt URL to: foo:8080/
*   Trying 172.20.166.230...
* TCP_NODELAY set

在Kubernetes中应该像这样工作吗?

从相同 namespace 的其他Pod请求foo时,我没有任何问题。

我之所以不简单地使用localhost:8080(它可以正常工作)的原因是,我具有相同的配置文件,并且主机使用了不同的Pod,因此我不想为每个Pod编写特定的逻辑。

Kubernetes 1.6.4,单节点集群,iptables模式

最佳答案

使用iptables作为代理模式时,这似乎是默认行为。

关于kubernetes - 通过自己的服务从pod请求到localhost无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47436841/

相关文章:

多个命名空间的基于 Kubernetes 路径的路由

docker - Kubernetes VolumeMount 路径包含时间戳

linux - 如何以根用户身份输入Pod?

docker - 在不自动启动Tomcat的情况下在Docker容器中部署Spring Boot App

kubernetes - k8s Horizo​​ntalPodAutoscaler - 设置限制目标,而不是请求

docker - 使用 Gitlab 安装 Ingress 的 Kubernetes 返回 "?"作为外部 IP

kubernetes - kubernetes efk:fluentd的 'filter'过滤什么?

kubernetes - Helm : how to mount configMap if not supported by values. yaml?

docker - 如何从 Docker-for-mac 或 Docker-for-Windows 获取可浏览的 url?

当应用程序在端口 80 上时,Kubernetes 负载均衡器重定向到 HTTPs