您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行Kubernetes中Secret和私有倉庫認證,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
對一個公司來說安全也是最為重要的因為可能一旦出現(xiàn)安全問題可能這個公司就完了,所以對密碼管理是一個長久不變的話題,Kubernetes對密碼管理提供了Secret組件進行管理,最終映射成環(huán)境變量,文件等方式提供使用,統(tǒng)一進行了管理更換方便,并且開發(fā)人員并不需要關(guān)心密碼降低了密碼的受眾范圍從而保障了安全.
Kubernetes官方文檔:https://kubernetes.io/docs/reference/
Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes
PS:本系列中使用 KubernetesV1.8 RancherV1.6.14
首先我們需要初始化一個Secret,使用Yaml文件創(chuàng)建時需要使用base64之后的內(nèi)容作為Value
$ echo -n "admin" | base64 YWRtaW4= $ echo -n "1f2d1e2e67df" | base64 MWYyZDFlMmU2N2Rm
老規(guī)矩通過yaml的方式創(chuàng)建我們的Secret配置文件可以看到已經(jīng)生效了
> vim secret.yaml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm > kubectl create -f ./secret.yaml secret "mysecret" created > kubectl get secret NAME TYPE DATA AGE default-token-lnftf kubernetes.io/service-account-token 3 1d mysecret Opaque 2 9s
我們在使用Secret第一個場景就是作為容器的環(huán)境變量,大部分容器都提供使用環(huán)境變量配置密碼的功能,你的程序只需要讀取到這個環(huán)境變量使用這個環(huán)境變量的內(nèi)容去鏈接到對應(yīng)的服務(wù)就可以正常使用了,如下我們初始化一個Pod服務(wù),使用之前預(yù)設(shè)好的信息作為用戶名密碼配置進去
> vim secret-env.yaml apiVersion: v1 kind: Pod metadata: name: secret-env-pod spec: containers: - name: mycontainer image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never > kubectl create -f secret-env.yaml
除了配置成環(huán)境變量我們在很多地方也會使用到文件的方式來存放密鑰信息,最常用的就是HTTPS這樣的TLS證書,使用證書程序(比如Nginx沒法使用環(huán)境變量來配置證書)需要一個固定的物理地址去加載這個證書,我們吧之前配置用戶名和密碼作為文件的方式掛在到某個目錄下
> vim secret-file.yaml apiVersion: v1 kind: Pod metadata: name: secret-file-pod spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret > kubectl create -f secret-file.yaml
如果有需要對同的配置分開掛載到不同的地方可以使用如下配置
apiVersion: v1 kind: Pod metadata: name: secret-file-pod spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret items: - key: username path: my-group/my-username
username存儲在/etc/foo/my-group/my-username文件而不是/etc/foo/username。
password 不會掛載到磁盤
因為映射成了文件那么對權(quán)限也是可以控制的
volumes: - name: foo secret: secretName: mysecret defaultMode: 256
然后,秘密將被掛載,/etc/foo并且由秘密卷掛載創(chuàng)建的所有文件都將具有權(quán)限0400。
PS: JSON規(guī)范不支持八進制表示法,因此對于0400權(quán)限使用值256。如果您使用yaml代替pod的json,則可以使用八進制表示法以更自然的方式指定權(quán)限。
您也可以使用映射(如上例所示),并為不同的文件指定不同的權(quán)限,如下所示:
volumes: - name: foo secret: secretName: mysecret items: - key: username path: my-group/my-username mode: 511
在這種情況下,生成的文件/etc/foo/my-group/my-username將具有權(quán)限值0777。由于JSON限制,您必須以十進制表示法指定模式。
使用過K8s的小伙伴肯定會遇到一個問題,我們在使用自有的Docker倉庫的時候都需要先登錄用戶名和密碼,但是如果使用K8S怎么配置密碼呢?在secret中有一個類型是docker-registry我們可以通過命令行的方式創(chuàng)建在獲取Docker鏡像時使用的用戶名和密碼
kubectl create secret docker-registry regsecret --docker-server=registry-vpc.cn-hangzhou.aliyuncs.com --docker-username=admin --docker-password=123456 --docker-email=xxxx@qq.com
如果使用編排文件是如下格式
kind: Secret apiVersion: v1 metadata: name: regsecret type: kubernetes.io/dockercfg data: ".dockercfg": eyJyZWdpc3RyeS12cGMuY24taGFuZ3pob3UuYWxpeXVuY3MuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImVtYWlsIjoieHh5eEBxcS5jb20iLCJhdXRoIjoiWVdSdGFXNDZNVEl6TkRVMiJ9fQ== # 反base64的結(jié)果 : {"registry-vpc.cn-hangzhou.aliyuncs.com":{"username":"admin","password":"123456","email":"xxxx@qq.com","auth":"YWRtaW46MTIzNDU2"}}
然后我們就可以在獲取指定鏡像的時候為他指定一個獲取鏡像的Docker憑證
apiVersion: v1 kind: Pod metadata: name: secret-file-pod spec: containers: - name: mypod image: redis imagePullSecrets: # 獲取鏡像需要的用戶名密碼 - name: regsecret
關(guān)于如何進行Kubernetes中Secret和私有倉庫認證就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。