kubernetes - 使用服务的外部 IP 作为部署的环境变量
问题描述
是否可以将服务的外部 IP(NodePort 或 LoadBalancer)作为环境变量传递给不同服务部署中的容器?
举一个具体的例子,考虑一个 Kubernetes 集群,它有多个队友的命名空间,所以他们每个人都有自己的测试环境。在单一环境中,至少有两个服务:
- API 网关服务,用于将流量路由到其他服务
- 可以向环境注册 DNS 条目的服务
对于服务 #2,它需要知道服务 #1 的外部 IP 地址。到目前为止,我只能找到kubectl
用于描述服务 #1 的示例来查找此信息。我希望有可能做这样的事情:
apiVersion: v1
kind: Service
metadata:
name: gateway
namespace: "${ env }"
labels:
app: gateway
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: gateway
和
apiVersion: extensions/v1
kind: Deployment
metadata:
name: svc2-deployment
namespace: "${ env }"
labels:
app: svc2
spec:
template:
metadata:
labels:
app: svc2
spec:
containers:
- name: app
env:
- name: GATEWAY_IP
valueFrom:
fieldRef:
fieldPath: service.gateway.----.ingressIp
而不是将 say aninitContainers
与执行操作的脚本一起使用kubectl
。特别是因为我对 Kubernetes 很陌生 :)
解决方案
不是真的,但您可以为此使用DNS。例如:
apiVersion: extensions/v1
kind: Deployment
metadata:
name: svc2-deployment
namespace: "${ env }"
labels:
app: svc2
spec:
template:
metadata:
labels:
app: svc2
spec:
containers:
- name: app
env:
- name: GATEWAY_IP
value: gateway.<namespace-where-gw-is-running>.svc.cluster.local
推荐阅读
- java - 我们如何使用 jsonschema2pojo 生成 Java 8 可选 getter
- javascript - 网络工作者不与反应组件通信
- maven - Maven 版本不显示
- python - 如何在colab中使用Selenium来抓取动态内容?
- robotframework - 机器人框架-robotframework-sshlibrary-NameError:未定义名称'platform_system'
- html - 单击单选按钮时,根据用户选择打开引导模式
- cryptography - 将 OpenPGP 功能与 PKCS#11 集成以在 .NET/C# 应用程序中使用 HSM 设备
- java - Kotlin Int 的 8 个十六进制数字超出范围,但适用于 java int
- javascript - React:改变 useState 中对象集的值
- css - 将样式应用于 Tab 组件中的 ButtonBase