关于应用配置文件的种种

  • 开发测试生产环境的区分
  • 将不同环境的配置文件放入不同的目录中。

         比如app/下的dev,stg,prd目录,在app根目录下放一个启动文件startupapp.sh

        用处是在启动catalina前把相关的文件替换掉。内容如下

#!/bin/sh

if [ $DEPLOYMODE = "dev" ] ; then
   cp /usr/tomcat/iac/dev/setclasspath.sh /usr/tomcat/bin
   cp /usr/tomcat/iac/dev/server.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/dev/context.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/dev/catalina.sh /usr/tomcat/bin
fi

if [ $DEPLOYMODE = "stg" ] ; then
   cp /usr/tomcat/iac/stg/setclasspath.sh /usr/tomcat/bin
   cp /usr/tomcat/iac/stg/server.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/stg/context.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/stg/catalina.sh /usr/tomcat/bin
fi

if [ $DEPLOYMODE = "prd" ] ; then
   cp /usr/tomcat/iac/prd/setclasspath.sh /usr/tomcat/bin
   cp /usr/tomcat/iac/prd/server.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/prd/context.xml /usr/tomcat/conf
   cp /usr/tomcat/iac/prd/catalina.sh /usr/tomcat/bin
fi

/usr/tomcat/catalina.sh run
  • 可以在yaml文件中传入一个环境变量,比如
    DEPLOYMODE =dev/stg/prd
  • 数据库密码字段的密文

生成一个base64编码的密文

#echo -n 'zombie' | base64
em9tYmll

建立一个mysecret.yaml,Opaque secret就是字符串

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

挂载到deployment或者Pod

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
    - name: mycontainer
      image: busybox
      imagePullPolicy: IfNotPresent
      command:
        - sleep
        - "3600"
      env:
        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: password

 SECRET_PASSWORD会带入容器的环境变量中

修改tomcat的catalina.sh的配置,将环境变量带入,这一步非常关键,否则在server.xml里面无法获取环境变量的值

JAVA_OPTS="-DSECRET_PASSWORD=${SECRET_PASSWORD} $JAVA_OPTS $JSSE_OPTS"

在应用的server.xml中进行引用,比如

<Context password="${SECRET_PASSWORD}" debug="0" crossContext="true" path="/solr"></Context>

方案的问题:

  • 密码带入pod环境变量后是明文
  • 如果是上生产环境,以上步骤会交给部署组负责,因此开发是无法知道加密后的字符串的
  • 同时也不能让他登陆后台进入Pod 
  • 给节点打Label操作
kubectl label nodes kube-node node=kube-node

kubectl get node -a -l "node=kube-node"

部署的时候加上node-selector

nodeSelector: 
       node: kube-node4
原文地址:https://www.cnblogs.com/ericnie/p/8315680.html