Kubernetes外部名称服务

25

我创建了一个类型为ExternalName的Kubernetes Service。我知道这个Service充当代理,将请求重定向到集群外部的外部Service。我能够创建Service,但无法使用curl访问(即返回500错误)。我想要了解这个ExternalName Kubernetes Service是如何工作的。


1
500是一种响应,因此您可以使用curl(或至少curl 某些东西)。 这意味着名称解析(这基本上是外部名称服务提供的内容)正在产生某些影响-否则您将看到“无法解析主机”或类似消息。 - Oliver Charlesworth
@OliverCharlesworth curl -v -H "Host: <Host>" <URL>,这是我正在使用的命令语法。它正确吗?还需要添加其他参数吗? - Kunal Malhotra
1个回答

56

类型为ExternalName的服务与其他普通服务一样工作,但当您想要访问该服务名称时,它会返回具有在服务的externalName:参数中提到的值的CNAME记录,而不是返回此服务的群集IP。

正如Kubernetes文档中所提到的示例:

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: my.database.example.com
当您想在命名空间中执行curl -v http://my-servicecurl -v http://my-service.default.svc.cluster.local时(在此示例中为default),它将在DNS级别重定向到http://my.database.example.com
希望这对您有用。

1
如果我在除默认命名空间之外的任何其他命名空间中创建了我的外部名称服务,则无法使用“curl -v http://my-service”来访问我的服务。请告诉我如何使externalname独立于命名空间。 - Bhavani Prasad
2
@BhavaniPrasad 请尝试使用 curl -v my-service.<namespace>.svc.cluster.local - Shubham
这是否意味着网络应该设置DNS以解析到我的.database.example.com URL,如果是这样的话,ExternalName有什么作用? - cnu
6
为了改善您的答案,您可能需要澄清一点,即这不是一个“代理服务”。根据文档:https://kubernetes.io/docs/concepts/services-networking/service/#externalname“访问 my-service 的方式与其他服务相同,但关键区别在于重定向发生在 DNS 层而不是通过代理或转发。” - chakatz
@clxoid,我和David He有同样的问题。您能否详细说明以下声明:“访问my-service的方式与其他服务相同,但关键区别在于重定向是通过DNS级别而不是通过代理或转发实现的。” - Kiran Hegde
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接