我理解ExternalName类型的服务将指向没有使用指定的外部名称作为DNS名称向外部公开的指定部署。我使用minikube在我的本地机器与docker驱动器。我使用自定义映像创建了一个部署。当我为特定的部署创建一个默认类型(集群IP)和负载均衡器的服务时,我能够在端口转发到本地IP地址后访问它。这对于服务类型ExternalName也是可能的,但可以使用ip地址访问,而不是指定的外部名称.
根据我的理解ExternalName类型的服务应该在使用指定的外部名称时被访问. 但我做不到。谁能告诉我如何访问外部名称服务,以及我的理解是否正确?
这是我使用的externalName.yaml
文件。
apiVersion: v1
kind: Service
metadata:
name: k8s-hello-test
spec:
selector:
app: k8s-yaml-hello
ports:
- port: 3000
targetPort: 3000
type: ExternalName
externalName: k8s-hello-test.com
使用kubectl port-forward service/k8s-hello-test 3000:3000
进行端口转发后,可以使用http://127.0.0.1:300
访问特定的部署但即使将它添加到etc/hosts文件,不能使用http://k8s-hello-test.com
根据我的理解ExternalName类型的服务应该是在使用指定的外部名称时访问。但我做不到这样做。谁能告诉我如何使用它的外部名称访问它?
你错了,外部服务是用来进行外部连接的。假设您正在使用第三方地理定位API,如https://findmeip.com,您可以利用外部名称服务。
ExternalName Service是服务的一种特殊情况有选择器并使用DNS名称。有关更多信息,请参见
例如
apiVersion: v1
kind: Service
metadata:
name: geolocation-service
spec:
type: ExternalName
externalName: api.findmeip.com
所以你的应用程序可以连接到geolocation-service,它将请求转发到服务中提到的外部DNS。
ExternalName服务没有选择器,您不能使用端口转发,因为它连接到POD并转发请求。
阅读更多:https://kubernetes.io/docs/concepts/services-networking/service/#externalname