soo*_*sap 7 kubernetes kubernetes-service
在kubernetes 部署中,我指定一个端口,如下所示:
containers:
- name: nginx
image: nginx:latest
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
现在,在服务中,我可以像这样引用该端口(允许我仅在服务中指定外部端口):
spec:
type: ClusterIP
ports:
- name: nginx-port
port: 80
targetPort: nginx-port
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我可以使用以下语法在其他地方引用服务和端口nginx-service.default.svc.cluster.local:nginx-port吗?您知道我可以使用这些特殊名称来引用服务,但是我发现自己像这样对端口号进行了硬编码nginx-service.default.svc.cluster.local:80。
小智 20
Kubernetes DNS 服务使用以下格式为所有命名服务端口提供SRV 记录
_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您应该能够通过查询以下域来访问它
_nginx-port._tcp.nginx-service.default.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)
例子
nslookup -type=SRV _nginx-port._tcp.nginx-service.default.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)
结果:
_nginx-port._tcp.nginx-service.default.svc.cluster.local service = 0 100 80 nginx-service.default.svc.cluster.local.
Run Code Online (Sandbox Code Playgroud)
在上面的输出中,nginx-service.default.svc.cluster.local是目标域,80也是您应该连接到的目标端口,即nginx-service.default.svc.cluster.local: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
Run Code Online (Sandbox Code Playgroud)
kube-dns是一种 DNS 服务,使用与所有常规 DNS 服务器相同的协议。从这个意义上说,DNS 并不是为了解析“端口名称”而设计的,而是为了解析域名(映射到 IP 地址)。
几个人所做的就是拥有一个反向代理,它将 ProxyPass 流量从一个端口传输到另一个端口(假设我们正在讨论 HTTP/HTTPS 流量)https://serverfault.com/questions/85078/how-to-forward-dns -alias-to-hostnameport或使用 iptables 规则https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables。但是,这些假设您首先将流量转发到特定端口(例如 80)
正如您在评论中所写,使用环境变量将是适合您情况的选项。
| 归档时间: |
|
| 查看次数: |
6185 次 |
| 最近记录: |