首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kubernetes中设置基于服务的环境变量

在Kubernetes中设置基于服务的环境变量
EN

Stack Overflow用户
提问于 2019-04-05 20:38:09
回答 2查看 2.2K关注 0票数 1

我在Kubernetes中运行一个基于api和web界面的简单应用程序。但是,我似乎不能让api与web界面对话。在我的本地环境中,我只是在web界面中定义了一个变量API_URL。localhost:5001,并且web接口正确连接到api。由于api和web运行在不同的pod中,我需要让它们通过Kubernetes中的服务相互通信。到目前为止,这就是我正在做的事情,但没有任何运气。

我为API设置了一个部署

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      containers:
      - name: api
        image: gcr.io/myproject-22edwx23/api:latest
      ports:
      - containerPort: 5001

我给它附加了一个服务:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: api-cluster-ip-service
spec:
  type: NodePort
  selector:
    component: api
  ports:
    - port: 5001
      targetPort: 5001

然后创建一个应该连接到此api的web部署。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: web
  template:
    metadata:
      labels:
        component: web
    spec:
      containers:
      - name: web
        image: gcr.io/myproject-22edwx23/web:latest
        ports:
        - containerPort: 5000
        env:
          - name: API_URL
            value: http://api-cluster-ip-service:5001

然后,我为web界面+入口等添加了一个服务,但这似乎与问题无关。我想知道api的设置是否通过http://api-cluster-ip-service:5001正确获取了API_URL的主机。

或者我不能依赖Kubernetes为api获得适当的dns,以及web应用程序是否应该通过公共互联网调用api。

EN

回答 2

Stack Overflow用户

发布于 2019-04-05 21:49:54

如果要检查API_URL变量值,只需运行

代码语言:javascript
复制
kubectl exec -it web-deployment-pod env | grep API_URL

kube-dns服务侦听来自Kubernetes API的服务和端点事件,并根据需要更新其DNS记录。在创建、更新或删除Kubernetes服务及其关联的pods时,会触发这些事件。

kubelet在/etc/resolv.conf中设置每个新pod的搜索选项

但是,如果您想通过集群服务从一个pod到另一个pod,建议您参考服务的ClusterIP,如下所示

代码语言:javascript
复制
api-cluster-ip-service.default.svc.cluster.local

您应该将服务IP分配给web pod中的env变量,因此不需要重新创建它:

代码语言:javascript
复制
sukhoversha@sukhoversha:~/GCP$ kk exec -it web-deployment-675f8fcf69-xmqt8 env | grep -i service
API_CLUSTER_IP_SERVICE_PORT=tcp://10.31.253.149:5001
API_CLUSTER_IP_SERVICE_PORT_5001_TCP=tcp://10.31.253.149:5001
API_CLUSTER_IP_SERVICE_PORT_5001_TCP_PORT=5001
API_CLUSTER_IP_SERVICE_PORT_5001_TCP_ADDR=10.31.253.149

阅读有关DNS for Services的更多信息

票数 1
EN

Stack Overflow用户

发布于 2019-04-05 23:13:01

如果要使用环境变量,可以执行以下操作:

Python中的示例:

代码语言:javascript
复制
import os
API_URL = os.environ['API_CLUSTER_IP_SERVICE_SERVICE_HOST'] + ":" + os.environ['API_CLUSTER_IP_SERVICE_SERVICE_PORT']

请注意,环境变量基于您的服务名称。如果您想要检查Pod中所有可用的环境变量:

代码语言:javascript
复制
kubectl get pods #get {pod name}
kubectl exec -it {pod_name} printenv

注意,Pod在创建过程中获取其环境变量,并且无法从之后创建的服务中获取环境变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55535587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档