首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hostNetwork为真的Kubernetes实例无法访问同一集群内服务的外部in

hostNetwork为真的Kubernetes实例无法访问同一集群内服务的外部in
EN

Stack Overflow用户
提问于 2020-11-12 03:30:07
回答 2查看 3.5K关注 0票数 2

问题

我有两个pod AB在minikube上的集群中运行,它们都有外部IP www.service-a.comwww.service-b.com。两个外部IP均可从外部访问。

我需要A能够使用它的外部IP而不是它的集群DNS调用B,也就是说,A需要使用www.service-b.com而不是b.svc.cluster.local (它确实可以工作,但我不能使用它)。

我将A设置为使用hostNetwork: truednsPolicy: ClusterFirstWithHostNet。如果我手动启动一个NodeJS docker容器,它确实可以连接并找到它。但是,A仍然无法连接到service-b.com。我是不是用错了hostNetwork?如何配置我的pod以这种方式连接到b

A的部署YAML

代码语言:javascript
复制
...
spec:
  replicas: 1
  selector:
    matchLabels:
      app: a-app
  template:
    metadata:
      labels:
        app: a-app
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
...

B的服务YAML

代码语言:javascript
复制
...
spec:
  externalTrafficPolicy: Cluster
  type: LoadBalancer
  ports:
  - port: ...
    targetPort: ...
    protocol: TCP
    name: http
...

背景:

我正在使用Minio (一种类似于本地S3的解决方案),并且我需要预先指定URL来获取和放置对象。Minio的pod与我的身份验证pod运行在同一个集群中,它将生成预签名的urls。预签名的urls将从群集外部使用。因此,我不能使用群集dns名称来签名url,因为这个URL不能从群集外部访问,并且用my-minio.com替换主机并保留签名是不起作用的,因为我猜minio会对整个主机和路径进行签名。因此,我需要让我的身份验证pod连接到Minio的面向公众的my-minio.com,这似乎不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-18 02:15:37

正如Grigoriy建议的那样,我使用带有nginx.ingress.kubernetes.io/upstream-vhost注释的入口将所有请求转发到使用Host: service-b的集群中,以解决我的问题。以前我有nginx.ingress.kubernetes.io/rewrite-target: /$1,它从导致一系列问题的请求中剥离了路径,所以我删除了它。我如何让它工作的详细信息在这里:

NGINX controller Kubernetes: need to change Host header within ingress

票数 1
EN

Stack Overflow用户

发布于 2020-11-12 04:30:23

关于hostNetwork,看起来你误解了它。将其设置为true意味着Pod将有权访问运行它的主机。在minikube的情况下,它是VM,而不是运行实际容器的主机。

此外,我不确定您如何向外部世界公开您的服务,但我建议您尝试使用Ingress

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64792961

复制
相关文章

相似问题

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