Docker 主机网络为True的Kubernetes Pod无法访问同一集群中服务的外部IP 问题
我有两个PODDocker 主机网络为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
A
和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 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。现在我的问题解决了:)