在图像上使用服务器环境变量

shu*_*dim 1 kubernetes angular

我有一个用angular4编写的应用,正在生产环境和沙箱上运行,

我创建一个映像,然后在kubernetes上进行部署

我有一些与沙箱和生产环境不同的环境变量,目前我建立了两个不同的映像,一个用于沙箱,另一个用于生产:

下的环境src/envirnments

环境产品

export const environment = {
  production: true,
  server_url: 'https://api.example.com/app/',
};
Run Code Online (Sandbox Code Playgroud)

environment.sandbox.ts

export const environment = {
  production: false,
  server_url: 'https://api-sandbox.example.com/app/',
};
Run Code Online (Sandbox Code Playgroud)

建筑形象:

生产ng build --prod

沙箱ng build--prod --env=sandbox

现在,我该如何使用外部环境变量呢?像这样的东西applicatoion.getEnvirnment('server_url'),我不需要为每个环境创建图像吗?

这是我的deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: angular-web-app
  namespace: production
spec:
  replicas: 1
  revisionHistoryLimit: 1
  strategy:
      type: RollingUpdate
  template:
    metadata:
      labels:
        app: angular-web-app
    spec:
      containers:
      - name: angular-web-app
        image: us.gcr.io/my-com/angular-web-app:06.01.2018
        ports:
        - containerPort: 80
        env:
        - name: SERVER_URL
          value: https://api.example.com
Run Code Online (Sandbox Code Playgroud)

这是我的dockerfile:

FROM nginx
COPY dist /usr/share/nginx/html
EXPOSE 80
EXPOSE 443
Run Code Online (Sandbox Code Playgroud)

建立图像:

ng build --prod --env=sandbox
docker build --rm -t ${REGISTRY}/${CONTAINER}:${TAG} .
Run Code Online (Sandbox Code Playgroud)

我将环境变量添加到部署中,我希望应用从那里获取值

din*_*ina 6

或者,您可以从本地config json读取,然后使用卷,每个环境都有单独的配置映射,请参见

src/assets/config配置json下,

在您的代码中,从配置文件中读取网址:

private getConfigJSONFile() {
     return this.http.get("/assets/config/env-vars.json").map((res:any) => res.json())
   }
Run Code Online (Sandbox Code Playgroud)

现在在kubernetes上创建配置:

这是配置文件:

configs / env-variables.json

{
  "api_server_url": "https://api.example.com"
}
Run Code Online (Sandbox Code Playgroud)

创建配置

kubectl create configmap angular-env-vars --from-file=env-vars.json=configs/env-variables.json
Run Code Online (Sandbox Code Playgroud)

在部署中使用卷:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: angular-web-app
spec:
  replicas: 1
  revisionHistoryLimit: 1
  strategy:
      type: RollingUpdate
  template:
    metadata:
      labels:
        app: angular-web-app
    spec:
      containers:
      - name: angular-web-app
        image: us.gcr.io/my-com/angular-web-app:06.01.2018
        volumeMounts:
        - name: env-vars
          mountPath: /usr/share/nginx/html/assets/config
        ports:
        - containerPort: 80
      volumes:
      - name: env-vars
        configMap:
          name: angular-env-vars
Run Code Online (Sandbox Code Playgroud)