Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 主机网络为True的Kubernetes Pod无法访问同一集群中服务的外部IP 问题_Docker_Kubernetes_Minio - Fatal编程技术网

Docker 主机网络为True的Kubernetes Pod无法访问同一集群中服务的外部IP 问题

Docker 主机网络为True的Kubernetes Pod无法访问同一集群中服务的外部IP 问题,docker,kubernetes,minio,Docker,Kubernetes,Minio,我有两个PODA和B在minikube的集群中运行,它们都有外部IPwww.service-A.com和www.service-B.com。两个外部IP都可以从外部访问 我需要A能够用它的外部IP而不是它的群集DNS调用B,也就是说A需要使用www.service-B.com而不是B.svc.cluster.local(这确实有效,但我不能使用它) 我将A设置为使用hostNetwork:true和dnsPolicy:ClusterFirstWithHostNet。如果我手动启动NodeJS d

我有两个POD
A
B
在minikube的集群中运行,它们都有外部IP
www.service-A.com
www.service-B.com
。两个外部IP都可以从外部访问

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

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

A的部署YAML

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

B的服务YAML

...
spec:
  externalTrafficPolicy: Cluster
  type: LoadBalancer
  ports:
  - port: ...
    targetPort: ...
    protocol: TCP
    name: http
...
背景:
我正在使用Minio(一种类似于S3的本地解决方案),我需要预先设计URL以获取和放置对象。Minio的pod与我的身份验证pod运行在同一集群中,身份验证pod将生成预先签名的url。预签名的URL将从集群外部使用。因此,我无法使用群集dns名称(如
minio.svc.cluster.local
)对url进行签名,因为此url将无法从群集外部访问,并将主机替换为
my minio.com
,保留签名也不起作用,因为我猜minio会对整个主机和路径进行签名。因此,我需要让我的身份验证吊舱连接到Minio面向公众的
my Minio.com
,而这似乎不起作用。

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


另外,我不确定您如何向外部世界公开您的服务,但我建议您尝试这样做。

正如Grigoriy所建议的,我使用带有
nginx.ingres.kubernetes.io/upstream vhost
注释的ingress将所有请求转发到带有
主机:service-b
的集群来解决我的问题。以前我有
nginx.ingres.kubernetes.io/rewrite-target://$1
,它从请求中剥离了导致严重问题的路径,因此我删除了该路径。我如何使其工作的详细信息如下:


我刚刚使用了一个启用了externalTrafficPolicy的负载平衡器。如果有入口,pod是否能够通过入口连接到另一个pod?我在Kube是个新手。好吧,现在就去试试。一旦我完成部署,将在此更新我在本地计算机上部署了一个入口和一个nginx控制器
命名空间名称主机地址端口使用我的命名空间my minio localhost localhost 80 16m
,点击localhost现在指向pod B,但A无法点击
localhost
并到达pod B。用
nginx.ingres.kubernetes.io/upstream vhost
替换主机头的方法似乎很有希望,但仅仅将该注释放在我的ingres中似乎并没有现成的效果。也许是因为我通过helm安装了nginx?事实证明,我不应该声明重写目标和ssl重定向。按预期更换上游vhost。现在我的问题解决了:)