问题
我有两个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运行在同一个集群中,它将生成预签名的urls。预签名的urls将从群集外部使用。因此,我不能使用群集dns名称来签名url,因为这个URL不能从群集外部访问,并且用my-minio.com替换主机并保留签名是不起作用的,因为我猜minio会对整个主机和路径进行签名。因此,我需要让我的身份验证pod连接到Minio的面向公众的my-minio.com,这似乎不起作用。
发布于 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
发布于 2020-11-12 04:30:23
关于hostNetwork,看起来你误解了它。将其设置为true意味着Pod将有权访问运行它的主机。在minikube的情况下,它是VM,而不是运行实际容器的主机。
此外,我不确定您如何向外部世界公开您的服务,但我建议您尝试使用Ingress。
https://stackoverflow.com/questions/64792961
复制相似问题