具有 hostNetwork True 的 Kubernetes Pod 无法访问同一集群中服务的外部 IP

Mat*_*ard 4 docker kubernetes minio

问题

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

我需要A能够B使用它的外部IP而不是它的集群DNS进行调用,这A需要使用www.service-b.com而不是b.svc.cluster.local(这确实有效,但我不能使用它)。

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

A 的部署 YAML

...
spec:
  replicas: 1
  selector:
    matchLabels:
      app: a-app
  template:
    metadata:
      labels:
        app: a-app
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
...

Run Code Online (Sandbox Code Playgroud)

B 的服务 YAML

...
spec:
  externalTrafficPolicy: Cluster
  type: LoadBalancer
  ports:
  - port: ...
    targetPort: ...
    protocol: TCP
    name: http
...
Run Code Online (Sandbox Code Playgroud)

背景:

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

Gri*_*kin 6

关于hostNetwork,看来你理解错了。将其设置为 true 意味着 Pod 将有权访问其运行的主机。对于 minikube,它是虚拟机,而不是实际运行容器的主机。

另外,我不确定你如何向外部世界公开你的服务,但我建议你尝试Ingress