- 开发测试生产环境的区分
- 将不同环境的配置文件放入不同的目录中。
比如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