如何使用Kubernetes端口名?

如何使用Kubernetes端口名?,kubernetes,kubernetes-service,Kubernetes,Kubernetes Service,在kubernetes部署中,我指定如下端口: containers: - name: nginx image: nginx:latest ports: - name: nginx-port containerPort: 80 protocol: TCP 现在在服务中我可以像这样引用该端口(只允许我在服务中指定外部端口): 现在的问题是,我是否可以使用以下语法nginx service.default.svc.cluster.local:ngin

在kubernetes部署中,我指定如下端口:

 containers:
 - name: nginx
   image: nginx:latest
   ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
现在在服务中我可以像这样引用该端口(只允许我在服务中指定外部端口):


现在的问题是,我是否可以使用以下语法
nginx service.default.svc.cluster.local:nginx port
?您知道我可以使用这个特殊名称引用服务,但我发现自己硬编码端口号,如so
nginx service.default.svc.cluster.local:80

kube dns
是一种与所有常规dns服务器使用相同协议的dns服务。从这个意义上讲,DNS不是用来解析“端口名”,而是用来解析域名(映射到IP地址)

一些人所做的是使用反向代理,将流量从一个端口代理传递到另一个端口(假设我们讨论的是HTTP/HTTPS流量),或者使用iptables规则。但是,这些假设首先将流量转发到特定端口(例如,80)


正如您在评论中所写,使用环境变量将是适合您的情况的选项

否。不能使用端口名而不是端口号。ServicePort中的名称字段有不同的用途

ServiceSpec中的所有端口必须具有唯一的名称。此名称映射到EndpointPort对象中的“名称”字段


对于每个服务,将生成一个端点对象。该端点的每个端口都对应一个服务端口。ServicePort和EndpointPort中的Name字段都用于此匹配。

通常,您通过其编号引用目标端口。但您可以为每个pod的端口指定一个特定的名称,并在服务规范中引用该名称

这将使您的服务更清晰。这里有一个小例子:

apiVersion: v1
kind: Pod
metadata:
  name: named-port-pod
  labels:
    app: named-port-pod
spec:
  containers:
    - name: echoserver
      image: gcr.io/google_containers/echoserver:1.4
      ports:
      - name: pod-custom-port
        containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: named-port-svc
spec:
  ports:
    - port: 80
      targetPort: pod-custom-port
  selector:
    app: named-port-pod

Kubernetes DNS服务使用以下格式为服务的所有命名端口提供

_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example
在您的情况下,您应该能够通过查询下面的域来访问它

_nginx-port._tcp.nginx-service.default.svc.cluster.local
范例

nslookup -type=SRV _nginx-port._tcp.nginx-service.default.svc.cluster.local
结果是:

_nginx-port._tcp.nginx-service.default.svc.cluster.local   service = 0 100 80 nginx-service.default.svc.cluster.local.

在上面的输出中,
nginx service.default.svc.cluster.local
是目标域,
80
是您应该连接的目标端口,也就是说,
nginx服务.default.svc.cluster.local:80

好,所以在我发布这篇文章之后,我意识到我可以利用注入容器的环境变量,即
$(nginx\u服务\u端口)
。仍然想知道端口是否也存在类似dns名称的东西,例如
nginx service.default.svc.cluster.local
。是否在任何地方记录了它?你能提供链接吗?谢谢:)还有。他们是如何融入这一宏大的计划的——我不知道。
_nginx-port._tcp.nginx-service.default.svc.cluster.local   service = 0 100 80 nginx-service.default.svc.cluster.local.