【发布时间】:2020-04-06 11:07:14
【问题描述】:
在 Kubernetes 中,我们可以使用服务将内部部署公开为服务端点。但是,如何将外部域名映射到 Kubernetes 服务中,以便在外部服务之前调用内部服务?
【问题讨论】:
-
您是在尝试将内部服务公开给外部,还是尝试将外部名称公开为内部服务?
-
我需要消费外部服务。
标签: kubernetes
在 Kubernetes 中,我们可以使用服务将内部部署公开为服务端点。但是,如何将外部域名映射到 Kubernetes 服务中,以便在外部服务之前调用内部服务?
【问题讨论】:
标签: kubernetes
ExternalName 类型的服务将服务映射到 DNS 名称,而不是典型的选择器,例如 my-service 或 cassandra。您可以使用 spec.externalName 参数指定这些服务。
例如,这个Service定义将prod命名空间中的my-serviceService映射到my.database.example.com:
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: my.database.example.com
注意:ExternalName 接受 IPv4 地址字符串,但作为由数字组成的 DNS 名称,而不是作为 IP 地址。类似于 IPv4 地址的 ExternalNames 不会由 CoreDNS 或 ingress-nginx 解析,因为 ExternalName 旨在指定规范的 DNS 名称。要对 IP 地址进行硬编码,请考虑使用无头服务。
https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-mapping-external-services
【讨论】:
您可以将外部名称公开为 Kubernetes 服务,以便集群中的 pod 可以访问该内部服务以与外部名称对话:
文档是:
https://kubernetes.io/docs/concepts/services-networking/service/#externalname
下面的方法会起作用:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ExternalName
externalName: my.database.example.com
【讨论】: