當容器中的應用需要訪問容器以外的服務(比如數據庫、代碼倉庫和kube-apiserver
等)時,那么不可避免地需要使用相應服務的帳號、密碼等憑據(取決于具體服務的要求)。所以如何為容器提供憑據、以及容器中的應用如何使用這些憑據就成了不得不思考的問題。
在沒有Secret
之前,為容器提供憑據主要有如下幾種方式:
將憑據硬編碼;
將憑據保存到文件,并最終放置到鏡像;
將憑據保存到文件中,并通過volume的形式掛載到容器;
首先,將憑據硬編碼的方式當然不可取,每次憑據變更都需要重新生成二進制文件。其次將私密的憑據放入鏡像,
會在鏡像分發過程中泄露憑據,同時憑據變更也需要重新制做鏡像,變更周期過長。最后,將憑據使用volume的形式掛載到容器這種方式,需要保證volume在多個集群節點共享(或每個節點擁有一個拷貝副本),難以保證憑據的私密性,同時在集群擴容時還需要保證新增節點上能夠訪問到憑據,維護成本比較大。
針對以上問題,Kubernetes
設計了一個新的名為Secrets
的資源類型,專門用來保存私密的憑據,它以鍵值方式存儲憑據,并支持在 Pod 資源中通過環境變量或volume引用。