如何从 React.js 应用程序访问 Kubernetes 容器环境变量?

时间:2021-05-21 11:02:05

标签: reactjs kubernetes server environment-variables

我有一个带有默认配置的 create-react-app。 我在 .env 文件中配置了一些 PORT 和 APIs

REACT_APP_PORT=3000

并使用带有 process.env.REACT_APP_PORT 的内部应用程序。

我的服务器部署在 Kubernetes 上。 有人可以解释一下如何配置我的 create-react-app 以使用 pods/containers 提供的环境变量吗?

我想通过 kubectl svc 给定的名称访问集群 IP

更新 1:

我有相反的情况,我不希望在 kubernetes pod 容器中配置我的前端 env 变量,但想使用 pod 的 env 变量

例如 CLUSTER_IP 和 CLUSTER_PORT,它们的名称由我的 react 应用程序中的 pod 环境变量定义。

例如-

NAME TYPE CLUSTER-IP 

XYZ ClusterIP x.y.z.a

并希望在 react 应用程序中访问 XYZ 以指向集群 IP (x.y.z.a)

2 个答案:

答案 0 :(得分:0)

试试这个:

kubectl create configmap react-config --from-literal=REACT_APP_PORT=3000

然后:

     spec:
       containers:
       - name: create-react-app
         image: gcr.io/google-samples/node-hello:1.0
         envFrom:
         - configMapRef:
             name: react-config
     

现在你从 pod 的“外部”配置了你的环境

另见文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables

答案 1 :(得分:0)

使用 Pod 字段作为环境变量的值

apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
          printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
          sleep 10;
        done;
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
  restartPolicy: Never

https://kubernetes.io/docs/tasks/inject-data-application/_print/ 也许上面的例子会对你有所帮助。