Ste*_*man 5 kubernetes netflix-eureka
在服务yaml文件中,您可以使用jsonpath选择命名的nodeport值,如下所示:
- name: MY_NODE_PORT
valueFrom:
fieldRef:
fieldPath: spec.ports[?(@.name=="http")].nodePort
Run Code Online (Sandbox Code Playgroud)
但是,在我的部署yaml文件中,我希望有一个MY_NODE_PORT
如上所述的环境变量,该变量暴露给容器到Pod。我碰巧将我的服务和部署组合到一个文件中,以便于执行kubectl create -f
。是否可以在“部署”部分而不是“服务”部分中选择命名的服务节点端口?
我的目的是注册Kubernetes服务并将其部署到旧版服务发现机制,在本例中为Netflix OSS Eureka。
正如Janos Lenart的回答和Marc Sluiter评论的那样,服务和部署是不同的资源,可以轻松地在单独的文件中指定。它们彼此之间没有直接的了解,而且,即使您将服务命名为 NodePort 端口,除非您显式指定服务 NodePort 端口值(例如从 30000 到 32767 的某个值),否则您将无法指定 pod 环境变量应该是匹配的。虽然您可以像Janos Lenart建议的那样对 NodePort 端口值进行硬编码,但它很脆弱且不推荐。
虽然 Kubernetes 为 pod 提供了许多方便的环境变量,但 pod 环境变量不可能引用 kubernetes 动态分配的服务 nodeport 端口值。
但是,Pod确实有权与 Kubernetes API 服务器通信,并且 API 服务器将能够回复有关服务的信息,例如节点端口。因此,Pod 可以向 API 服务器询问服务的 NodePort 端口值。我使用简单的 sidecar pod 创建了一个 kubernetes 服务和部署作为概念证明。
我的示例处理使用(外部或内部)Netflix OSS Eureka 服务注册表注册 Kubernetes NodePort 服务。这可能对其他人有用,可以将 Kubernetes 桥接到其他遗留服务发现机制。
归档时间: |
|
查看次数: |
916 次 |
最近记录: |