使用環境變數 (CLI) 參照密鑰及配置對映
在 Code Engine中,建立密鑰及 configmap 之後,應用程式、工作或函數工作負載可以透過參照完整密鑰或 configmap 或參照個別索引鍵,作為環境變數來使用儲存為鍵值組的資訊。
使用密鑰作為環境變數類似於使用 configmap 作為環境變數。 當您使用密鑰時,會對資料進行編碼。
當您更新應用程式、工作或函數時,如果該應用程式、工作或函數具有參照 configmap 或 secret 的環境變數,請考量下列資訊。
當您更新應用程式、工作或函數時,如果其環境變數完全參照 configmap (或密鑰),以完全參照不同的 configmap (或密鑰),則完整參照會以其設定順序置換其他完整參照 (最後一個參照集置換第一個集)。
當您更新一個應用程式、工作或函式,而該應用程式、工作或函式的環境變數引用一個 configmap (或 secret) 中的金鑰,以引用不同 configmap (或 secret) 中的相同金鑰時,則會使用最後一個引用的金鑰。
當您更新具有完整參照 configmap (或密碼) 的環境變數的應用程式、工作或函數,以將參照新增至特定金鑰時,特定金鑰參照會置換完整 configmap (或密碼) 參照。
如需使用 CLI 來參照配置對映或密鑰的基本資訊,請參閱 使用 CLI 來參照配置對映 及 使用 CLI 來參照密鑰。
可以針對密鑰或 configmap 完成下列實務範例。
使用 CLI 參照完整密鑰
密鑰和 configmap 由鍵值組組成。 環境變數是在參照完整密鑰或 configmap 時提供每個金鑰的項目的結果。 如果多個密鑰 (或 configmap) 包含相同的具名金鑰,則您只會在參照的密鑰或 configmap 中取得其中一個金鑰。
在此實務範例中,建立密鑰,其中包含使用者名稱及密碼的鍵值組,然後在執行工作時參照完整密鑰。 您可以更新密鑰以新增金鑰,然後示範在工作中使用新金鑰。 雖然此實務範例使用密鑰,但您可以在指令中以 configmap 替代 secret,以使用相同的步驟來完整參照 configmap。
-
建立
mydatabasesec密鑰,並使用--from-literal選項指定使用者名稱及密碼的鍵值組。ibmcloud ce secret create -n mydatabasesec --from-literal username=reader --from-literal password=abcd -
使用
secret get指令來檢視mydatabasesec密鑰的詳細資料。 密鑰的password及username金鑰值已編碼。ibmcloud ce secret get -n mydatabasesec輸出範例
Getting generic secret 'mydatabasesec'... OK Name: mydatabasesec ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 17s Created: 2020-10-14 14:07:59 -0400 EDT Data: --- password: YWJjZA== username: cmVhZGVy -
在工作上設定環境變數以參照完整
mydatabasesec密鑰。 在此範例中,讓我們使用--env-from-secret PREFIX=NAME選項,其中PREFIX=NAME指定參照完整 configmap,其中每一個索引鍵都以PREFIX作為字首。 透過使用read_字首,每一個金鑰都會以read_作為字首。 因為依預設busybox影像不會列印任何輸出,所以-c env選項指定列印儲存器中的所有環境變數。ibmcloud ce job create -n demo -i busybox -c env --env-from-secret read_=mydatabasesec請考慮使用字首來協助確保工作或應用程式中的所有環境變數都是唯一的。 例如,如果您具有具有金鑰
a、b及c的秘密金鑰,則這些環境變數會顯示為a、b及c。 不過,如果您新增字首 (例如read_),則金鑰會以字首顯示,例如read_a、read_b及read_c。 使用字首也會將參照應用程式、工作或工作執行中的環境變數分組在一起,並協助您避免 configmap 或密鑰中的索引鍵重複。 -
(選用) 檢視
demo工作的詳細資料。 輸出會顯示mydatabasesec密鑰的完整參照。ibmcloud ce job get -n demo輸出範例
Getting job 'demo'... OK Name: demo ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 6s Created: 2022-05-04T15:04:16-04:00 Commands: env Environment Variables: Type Name Value Secret full reference read_=mydatabasesec Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 -
執行使用
demo工作配置的工作。ibmcloud ce jobrun submit --name demo1 --job demo -
顯示工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 在此範例中,顯示
demo1工作執行的日誌。 請注意,在日誌輸出中,完整密鑰mydatabasesec的金鑰會以字首read_顯示。 密鑰值會新增至已解碼的環境。ibmcloud ce jobrun logs --jobrun demo1輸出範例
Getting logs for all instances of job run 'demo1'... Getting jobrun 'demo1'... Getting instances of jobrun 'demo1'... [...] HOSTNAME=demo1-0-0 read_username=reader read_password=abcd JOB_INDEX=0 CE_SUBDOMAIN=8aaon2dfwa0 CE_JOBRUN=demo1 [...] -
更新
mydatabasesec密鑰,以使用--from-file選項來新增金鑰。 此選項使用--from-file FILE或--from-file KEY=FILE格式。 在下列指令中,certificate是金鑰,cert.pem是檔案的名稱。ibmcloud ce secret update -n mydatabasesec --from-file certificate=cert.pem -
使用
secret get指令來檢視已更新mydatabasesec密鑰的詳細資料。 密鑰現在包含三個金鑰:certificate、password及username。 密鑰值已編碼。ibmcloud ce secret get -n mydatabasesec輸出範例
Getting generic secret 'mydatabasesec'... OK Name: mydatabasesec ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 4m13s Created: 2020-10-14 13:35:43 -0400 EDT Data: --- certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tLS0tDQphc2RmO2Frc2pkZmxrYWpzZGZsa2phc2xka2ZqYWxza2RqZmxha3NqZGZsaw0KLS0tLS1FTkQgQ0VSVEZJQ0lBVEUtLS0tLS0tLS0t password: YWJjZA== username: cmVhZGVy -
執行使用
demo工作的工作。 先前,您已從demo工作參照完整密鑰mydatabasesec。 若要讓工作使用更新的密鑰與新增的certificate鍵值組搭配,請提交新的工作執行。 若要更新應用程式以使用更新的密碼,請重新啟動應用程式。ibmcloud ce jobrun submit --name demo2 --job demo -
使用
ibmcloud ce jobrun logs指令來顯示工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 若要顯示工作執行特定實例的日誌,請在jobrun logs指令中使用--instance選項。 必要的話,請使用jobrun get --name demo2指令來顯示此工作執行的詳細資料,包括工作執行的實例。 在此範例中,顯示demo2-0-0執行中實例的日誌,其中demo2是工作執行的名稱,0是arrayindex,而0是retryindex。 請注意,在輸出中,會顯示certificate、username及password完整密碼的金鑰mydatabasesec。 密鑰值會新增至已解碼的環境。
ibmcloud ce jobrun logs --instance demo2-0-0
輸出範例
Getting logs for job run instance 'demo2-0-0'...
[...]
read_certificate=-----BEGIN CERTIFICATE--------
asdf;aksjdflkajsdflkjasldkfjalskdjflaksjdflk
-----END CERTFICIATE----------
read_password=abcd
read_username=reader
使用 CLI 參照 configmap 的個別索引鍵
在此實務範例中,讓我們建立包含多個鍵值組的 configmap,然後參照工作中的特定索引鍵。 雖然此實務範例使用 configmap,但您可以使用相同的一般步驟來參照具有密鑰的個別金鑰,方法是在指令中以 secret 代替 configmap。
-
建立
mydatabaseconfigmap,並使用--from-literal KEY=VALUE選項指定名稱和 URL 的鍵值對。ibmcloud ce configmap create -n mydatabasecm --from-literal name=myname --from-literal url=myurl -
使用
configmap get指令來檢視mydatabasecmconfigmap 的詳細資料。ibmcloud ce configmap get -n mydatabasecm輸出範例
Getting configmap 'mydatabasecm'... OK Name: mydatabasecm ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 16s Created: 2020-10-14 13:31:19 -0400 EDT Data: --- name: myname url: myurl -
在工作上設定環境變數,以參照
mydatabasecmconfigmap 中的url索引鍵。 使用--env-from-configmap NAME:KEY_A,KEY_B選項,其中NAME:KEY_A指定參照配置對映的KEY_A。ibmcloud ce job create --name keydemo --image busybox --command env --env-from-configmap mydatabasecm:url -
執行使用
keydemo工作的工作。ibmcloud ce jobrun submit --name keydemo1 --job keydemo -
使用
ibmcloud ce jobrun logs指令來顯示工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 若要顯示工作執行特定實例的日誌,請在jobrun logs指令中使用--instance選項。 必要的話,請使用jobrun get --name keydemo1指令來顯示此工作執行的詳細資料,包括工作執行的實例。 請注意輸出中的url是唯一參照的索引鍵,且工作未參照name索引鍵。ibmcloud ce jobrun logs --instance keydemo1-0-0輸出範例
Getting logs for job run instance 'keydemo1-0-0'... [...] url=myurl [...]
使用 CLI 置換參照
您可以置換參照的密鑰及配置對映。 可以針對密鑰或 configmap 完成下列實務範例。
實務範例 A。 將完整參照的密鑰置換為另一個完整參照的密鑰
在此實務範例中,讓我們使用 username 和 password 金鑰來建立新的 mydatabasesec-writer 密鑰,然後置換先前建立的 mydatabasesec 密鑰中的 username 和 password 金鑰。 mydatabasesec 密鑰包含 username=reader 及 password=abcd 金鑰。
完整參照會以其他完整參照的設定順序來置換它們 (最後一個參照集會置換第一個集)。
-
在
writerjob工作上設定環境變數,以參照先前建立的完整mydatabasesec密鑰。mydatabasesec密鑰包含username=reader及password=abcd金鑰。ibmcloud ce job create -n writerjob -i busybox -c env --env-from-secret mydatabasesec -
(選用) 檢視
writerjob工作的詳細資料。 輸出會顯示mydatabasesec密鑰的完整參照。ibmcloud ce job get -n writerjob輸出範例
Getting job 'writerjob'... OK Name: writerjob ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 17s Created: 2021-02-12T07:12:08-06:00 [...] Commands: env Environment Variables: Type Name Value Secret full reference mydatabasesec Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 -
執行使用
writerjob工作的工作。ibmcloud ce jobrun submit --name writerjob1 --job writerjob -
顯示工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 在此範例中,顯示
writerjob1工作執行的日誌。 請注意,在輸出中顯示完整密鑰mydatabasesec的username及password金鑰。 密鑰值會新增至已解碼的環境。ibmcloud ce jobrun logs --jobrun writerjob1輸出範例
Getting jobrun 'writerjob1'... Getting instances of jobrun 'writerjob1'... Getting logs for all instances of job run 'writerjob1'... OK [...] certificate=-----BEGIN CERTIFICATE-------- asdf;aksjdflkajsdflkjasldkfjalskdjflaksjdflk -----END CERTFICIATE---------- password=abcd username=reader [...] -
建立
mydatabasesec-writer密鑰,並使用--from-literal選項指定使用者名稱及密碼的鍵值組。ibmcloud ce secret create --name mydatabasesec-writer --from-literal username=writer --from-literal password=wxyz -
使用
secret get指令來檢視mydatabasesec-writer密鑰的詳細資料。 密鑰的password及username金鑰值已編碼。ibmcloud ce secret get -n mydatabasesec-writer輸出範例
Getting generic secret 'mydatabasesec-writer'... OK Name: mydatabasesec-writer ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 14s Created: 2020-10-14 13:44:16 -0400 EDT Data: --- password: d3h5eg== username: d3JpdGVy -
更新
writerjob工作以參照完整mydatabasesec-writer密鑰並使用write_字首。ibmcloud ce job update --name writerjob --env-from-secret write_=mydatabasesec-writer -
(選用) 檢視已更新
writerjob工作的詳細資料。 工作完全參照mydatabasesec及mydatabase-writer密鑰。ibmcloud ce job get -n writerjob輸出範例
Getting job 'writerjob'... OK Name: writerjob ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 4m2s Created: 2021-02-12T07:12:08-06:00 [...] Commands: env Environment Variables: Type Name Value Secret full reference mydatabasesec Secret full reference write_=mydatabasesec-writer Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 -
執行使用
writerjob工作的工作。 因為writerjob工作已更新為同時參照mydatabasesec密鑰及mydatabasesec-writer密鑰,而且這兩個密鑰都包括username及password的金鑰,所以前次參照的完整密鑰mydatabasesec-writer會置換mydatabasesec密鑰。若要讓工作執行使用工作的已更新配置及其完整參照密鑰的更新,請執行新的工作。 若要更新應用程式以使用更新的密碼,請重新啟動應用程式。
ibmcloud ce jobrun submit --name writerjob2 --job writerjob -
使用
ibmcloud ce jobrun logs指令來顯示工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 若要顯示工作所有實例的日誌,請搭配使用--jobrun選項與jobrun logs指令。 若要顯示工作執行特定實例的日誌,請在jobrun logs指令中使用--instance選項。 必要的話,請使用jobrun get --name writerjob2指令來顯示此工作執行的詳細資料,包括工作執行的實例。 請注意,在輸出中,mydatabasesec-writer密碼的username及password金鑰會置換mydatabasesec密碼的金鑰。 此外,在日誌輸出中,會顯示完整密鑰mydatabasesec-writer的金鑰,並以字首write_。密鑰值會新增至解碼的環境。
ibmcloud ce jobrun logs --instance writerjob2-0-0
輸出範例
Getting logs for job run instance 'writerjob2-0-0'...
[...]
certificate=-----BEGIN CERTIFICATE--------
asdf;aksjdflkajsdflkjasldkfjalskdjflaksjdflk
-----END CERTFICIATE----------
password=abcd
username=reader
write_password=wxyz
write_username=writer
[...]
實務 B 以金鑰參照置換完整參照的密鑰
如果密鑰或 configmap 中的金鑰位於完全參照的密鑰或 configmap 中,則一律會置換密鑰或 configmap 的完整參照,而不考慮順序。
在此實務範例中,讓我們使用先前建立的 mydatabasesec 及 mydatabasesec-writer 密鑰,以及工作密鑰內的參照金鑰。
-
在
writerpic工作上設定環境變數,以參照mydatabasesec及mydatabasesec-writer密鑰中的特定金鑰。mydatabasesec密鑰包含username=reader、password=abcd及certificate=cert.pem金鑰。mydatabasesec-writer密鑰包含username=writer及password=wxyz金鑰。ibmcloud ce job create -n writerpick -i busybox -c env --env-from-secret mydatabasesec-writer:username --env-from-secret mydatabasesec-writer:password --env-from-secret mydatabasesec -
(選用) 檢視
writerpick工作的詳細資料。 輸出會顯示mydatabasesec密鑰的完整參照,以及mydatabasesec-writer密鑰之password及username金鑰的金鑰參照。ibmcloud ce job get -n writerpick輸出範例
Getting job 'writerpick'... OK Name: writerpick ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 107s Created: 2021-02-12T07:16:46-06:00 [...] Commands: env Environment Variables: Type Name Value Secret full reference mydatabasesec Secret key reference password mydatabasesec-writer.password Secret key reference username mydatabasesec-writer.username Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 -
執行使用
writerpick工作的工作。ibmcloud ce jobrun submit --name writerpick1 --job writerpick -
使用
ibmcloud ce jobrun logs指令來顯示writerpick1工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 若要顯示工作執行特定實例的日誌,請在jobrun logs指令中使用--instance選項。 必要的話,請使用jobrun get --name writerpick1指令來顯示此工作執行的詳細資料,包括工作執行的實例。 因為writerpick工作已更新為參照mydatabasesec-writer密鑰中的特定金鑰,並參照完整mydatabasesec密鑰,所以mydatabasesec-writer密鑰中username及password金鑰的參照會置換完整密鑰的參照。 密鑰值會新增至已解碼的環境。ibmcloud ce jobrun logs --instance writerpick1-0-0輸出範例
Getting logs for job run instance 'writerpick1-0-0'... [...] username=writer certificate=-----BEGIN CERTIFICATE-------- asdf;aksjdflkajsdflkjasldkfjalskdjflaksjdflk -----END CERTFICIATE---------- password=wxyz [...]
實務範例 C。 以新金鑰置換金鑰參照
您可以更新密鑰或 configmap 中特定金鑰的參照,並將值置換為新值。
在此實務範例中,讓我們使用先前建立的 mydatabasecm configmap,其中包含 url:myurl 索引鍵以更新索引鍵的值。
-
在
keyref工作上設定環境變數,以參照mydatabasecmconfigmap 中的特定索引鍵。ibmcloud ce job create -n keyref -i busybox -c env --env-from-configmap mydatabasecm:url -
(選用) 檢視
keyref工作的詳細資料。 輸出會顯示mydatabasecmconfigmap 中url索引鍵的索引鍵參照。ibmcloud ce job get -n keyref輸出範例
Getting job 'keyref'... OK Name: keyref ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 65s Created: 2021-02-12T07:18:44-06:00 [...] Commands: env Environment Variables: Type Name Value ConfigMap key reference url mydatabasecm.url Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 -
執行使用
keyref工作的工作。ibmcloud ce jobrun submit --name keyref1 --job keyref -
顯示使用
ibmcloud ce jobrun logs指令執行之keyref1工作的執行中實例的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 若要顯示工作執行特定實例的日誌,請在jobrun logs指令中使用--instance選項。 必要的話,請使用jobrun get --name keyref1指令來顯示此工作執行的詳細資料,包括工作執行的實例。 工作執行使用url=myurl金鑰參照。ibmcloud ce jobrun logs --instance keyref1-0-0輸出範例
Getting logs for job run instance 'keyref1-0-0'... [...] url=myurl [...] -
更新
keyref工作,以將url=myurl置換為新的金鑰。 使用--env選項來更新url金鑰。job update指令上的--env選項以NAME=VALUE格式設定工作的環境變數。ibmcloud ce job update --name keyref --env url=newurl -
(選用) 檢視
keyref工作的詳細資料。 輸出會顯示mydatabasecmconfigmap 中url索引鍵的索引鍵參照。ibmcloud ce job get -n keyref輸出範例
Getting job 'keyref'... OK Name: keyref ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-02-12T07:18:44-06:00 Commands: env Environment Variables: Type Name Value Literal url newurl Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3
使用 CLI 移除完整參照的密鑰或 configmap
您可以從工作或應用程式移除完整參照的密鑰或 configmap。
在此實務範例中,讓我們從 demo 工作中移除完整參照的 mydatabasesec 密鑰。
-
更新
demo工作,以移除對mydatabasesec密鑰的參照。ibmcloud ce job update -n demo --env-from-secret-rm mydatabasesec -
檢視
demo工作的詳細資料。 輸出說明已移除mydatabasesec密鑰的參照。ibmcloud ce job get -n demo輸出範例
Getting job 'demo'... OK Name: demo ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 19m Created: 2021-02-12T07:05:23-06:00 [...] Commands: env Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3
使用 CLI 移除金鑰參照
您可以從工作或應用程式中移除密鑰或 configmap 中的參照金鑰。
在此實務範例中,讓我們從 keyref 工作中移除 url 金鑰。
即使在工作上使用 --env-from-configmap 選項來參照 mydatabasecm configmap 中的 url 索引鍵,您也可以使用 --env-rm 選項來移除個別索引鍵。 您可以將 --env-rm 選項與 job update 或 app update 指令搭配使用,以移除金鑰參照,而不論金鑰是否為密鑰或 configmap 中的個別金鑰參照,或金鑰是否直接在工作或應用程式上使用 --env 選項設定。
-
更新
keydef工作,以移除url金鑰的參照。ibmcloud ce job update --name keyref --env-rm url -
檢視
keyref工作的詳細資料。 輸出說明已移除url索引鍵的參照。ibmcloud ce job get -n keyref輸出範例
Getting job 'keyref'... OK Name: keyref ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 6m27s Created: 2021-02-12T07:18:44-06:00 [...] Commands: env Image: busybox Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3