国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

secrets in kubernetes

NSFish / 3330人閱讀

摘要:目前只支持使用來自于的。現在我們能創建使用這個的當這個中的運行后,將會有如下兩個文件及對應的內容現在可以用這個數據來建立連接。

在kubernetes中,secret對象類型主要目的是 保存一些私密數據,比如密碼,OAuth tokens,ssh keys等信息。將這些信息放在secret對象中 比 直接放在pod或docker image中更安全,也更方便使用。

secrets描述

創建secrets對象的方式有兩種,一種是用戶手動創建,另一種是集群自動創建。

一個已經創建好的secrets對象有兩種方式被pod對象使用,其一,在container中的volume對象里以file的形式被使用,其二,在pull images時被kubelet使用。

為了使用secret對象,pod必須‘引用’這個secret,同樣可以手動或者自動來執行‘引用’操作。

自動建立ServiceAccount && 使用secret API

kubernetes會自動創建包含證書信息的secret,并且使用它來訪問api,kubernetes也將自動修改pod來使用這個secret。

自動創建的secret 以及 所使用的api證書 可以根據需要disable 或者 覆蓋。如果僅僅需要 安全訪問apiserver,那么上述的流程是推薦的方式。

手動創建secret

以下是一個簡單secret對象的例子:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: dmFsdWUtMg0K
  username: dmFsdWUtMQ0K

數據中的字段為map類型。其中keys必須符合dns_subdomain規則,values可以為任意類型,使用base64編碼。上述例子中,username和password的數據值在base64編碼前的值為value-1 和 value-2。

一旦secret被創建,可以:

通過ServiceAccount使用它自動創建pod;

修改pod來使用secret;

手動為pod綁定secret

以下是一個例子,綁定secret到一個pod的volume:

{
 "apiVersion": "v1",
 "kind": "Pod",
  "metadata": {
    "name": "mypod",
    "namespace": "myns"
  },
  "spec": {
    "containers": [{
      "name": "mypod",
      "image": "redis",
      "volumeMounts": [{
        "name": "foo",
        "mountPath": "/etc/foo",
        "readOnly": true
      }]
    }],
    "volumes": [{
      "name": "foo",
      "secret": {
        "secretName": "mysecret"
      }
    }]
  }
}

注意,必須有spec.volumes才能使用secret。
如果一個pod中有多個container,每個container需要他們多帶帶對應的volumeMounts ,但是一個secret只能對應一個spec.volumes。

只要需要,可以將許多文件打包進一個secret,或者使用多個secret。

手動指定imagePullSecret

詳細信息見:images documentation

Details 限制

在使用之前,secret volume 資源被驗證,以確保指定的對象引用真是指向一個secret對象。因此,在pod使用它之前必須保證需要的secret被成功創建。

secret api對象從屬于namespace,一個secret對象只能被同namespace的pod所使用。

單個secret限制在1Mb之內,防止過大的secret耗盡apiserver & kubelet的內存。然而,創建許多類似的secret同樣也會無用的消耗掉apiserver&kubelet的內存。

kubelet目前只支持pod使用來自于apiserver的secret。pods包括了被 kubectl創建的pod 或者 被replication controller間接創建的。

Consuming Secret Values

在一個綁定了secret的container中,會以secret keys為名的文件,其內容為secret value的base64 decode后的內容。下面是上述例子的輸出:

$ ls /etc/foo/
username
password
$ cat /etc/foo/username
value-1
$ cat /etc/foo/password
value-2

container中的程序可以讀取其中的文件來獲取其內容。

Secret 與 Pod Lifetime 關系

當通過api創建一個pod后,不會去檢查所引用的secret是否存在。一旦這個pod被使用,kubelet將會嘗試去獲取引用的secret的值。如果這個secret不存在,或者kubelet暫時鏈接不上apiserver,kubelet將會定期重試,并發送一個event來解釋pod沒有啟動的原因。如果獲取到了對應的secret,kubelet將會創建對應的volume并綁定到container。

一旦kubelet創建了一個pod,則container使用的相關secret volume不會在改變,即使對應的secret對象被修改。如果為了改變使用的secret,則必須刪除舊的pod,并重新創建一個新的pod。

User Case Use-Case: Pod with ssh keys

pod通過secret來使用ssh-key,首先得先創建對應的secret:

{
  "kind": "Secret",
  "apiVersion": "v1",
  "metadata": {
    "name": "ssh-key-secret"
  },
  "data": {
    "id-rsa": "dmFsdWUtMg0KDQo=",
    "id-rsa.pub": "dmFsdWUtMQ0K"
  }
}

Note:其中secret的data數據經過base64編碼,不包含換行符。

現在我們能創建使用這個secret的pod:

{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "secret-test-pod",
    "labels": {
      "name": "secret-test"
    }
  },
  "spec": {
    "volumes": [
      {
        "name": "secret-volume",
        "secret": {
          "secretName": "ssh-key-secret"
        }
      }
    ],
    "containers": [
      {
        "name": "ssh-test-container",
        "image": "mySshImage",
        "volumeMounts": [
          {
            "name": "secret-volume",
            "readOnly": true,
            "mountPath": "/etc/secret-volume"
          }
        ]
      }
    ]
  }
}

當這個pod中的container運行后,將會有如下兩個文件及對應的內容:

/etc/secret-volume/id-rsa.pub
/etc/secret-volume/id-rsa

現在container可以用這個secret數據來建立ssh連接。

Use-Case: Pods with prod / test credentials

下面的例子將會展示 一個pod使用包含prod環境證書的secret對象,另一個pod使用包含test環境證書的secret對象:

secret對象:

{
  "apiVersion": "v1",
  "kind": "List",
  "items":
  [{
    "kind": "Secret",
    "apiVersion": "v1",
    "metadata": {
      "name": "prod-db-secret"
    },
    "data": {
      "password": "dmFsdWUtMg0KDQo=",
      "username": "dmFsdWUtMQ0K"
    }
  },
  {
    "kind": "Secret",
    "apiVersion": "v1",
    "metadata": {
      "name": "test-db-secret"
    },
    "data": {
      "password": "dmFsdWUtMg0KDQo=",
      "username": "dmFsdWUtMQ0K"
    }
  }]
}

建立pods:

{
  "apiVersion": "v1",
  "kind": "List",
  "items":
  [{
    "kind": "Pod",
    "apiVersion": "v1",
    "metadata": {
      "name": "prod-db-client-pod",
      "labels": {
        "name": "prod-db-client"
      }
    },
    "spec": {
      "volumes": [
        {
          "name": "secret-volume",
          "secret": {
            "secretName": "prod-db-secret"
          }
        }
      ],
      "containers": [
        {
          "name": "db-client-container",
          "image": "myClientImage",
          "volumeMounts": [
            {
              "name": "secret-volume",
              "readOnly": true,
              "mountPath": "/etc/secret-volume"
            }
          ]
        }
      ]
    }
  },
  {
    "kind": "Pod",
    "apiVersion": "v1",
    "metadata": {
      "name": "test-db-client-pod",
      "labels": {
        "name": "test-db-client"
      }
    },
    "spec": {
      "volumes": [
        {
          "name": "secret-volume",
          "secret": {
            "secretName": "test-db-secret"
          }
        }
      ],
      "containers": [
        {
          "name": "db-client-container",
          "image": "myClientImage",
          "volumeMounts": [
            {
              "name": "secret-volume",
              "readOnly": true,
              "mountPath": "/etc/secret-volume"
            }
          ]
        }
      ]
    }
  }]
}

建立的兩個pod都擁有兩個文件:

    /etc/secret-volume/username
    /etc/secret-volume/password

可以使用service accounts來簡化上述的流程,一個是prod-user對應prod-db-secret,另一個是test-user對應test-db-secret,如:

{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
  "name": "prod-db-client-pod",
  "labels": {
    "name": "prod-db-client"
  }
},
"spec": {
  "serviceAccount": "prod-db-client",
  "containers": [
    {
      "name": "db-client-container",
      "image": "myClientImage",
    }
  ]
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32435.html

相關文章

  • Kubernetes持續集成:Jenkins關于java.nio.file.NoSuchFileEx

    摘要:嘗試運行腳本發生了的錯誤。錯誤信息接下來就是,天的調查,關于這個錯誤的能查到的資料幾乎沒有,也嘗試了很多方法,無果非常煎熬。問題解決了參考文檔初試使用完成持續構建與發布集群安全配置 背景 為了使用Kubernetes管理并自動化部署應用程序,領導糾結了幾個同事搭了一個Kubernetes集群環境。不過,為了減少復雜度,采用了非官方推薦的方式: API Server使用http方式 不...

    tomener 評論0 收藏0
  • kubernetes安裝dashboard

    摘要:前言在安裝搭建的時候,往往會遇到各種各樣的問題,而安裝的展示組件則是困難中的困難,本人在實際搭建中則被整整卡住了天,和百度輪番搜索,各種技術博客和技術視頻反復研究才勉強搭建成功開始安裝在安裝好集群之后,確保集群各個節點都處于狀態的時候,就 前言 在安裝搭建k8s的時候,往往會遇到各種各樣的問題,而安裝k8s的web展示組件kubernetes-dashboard則是困難中的困難,本人在...

    Guakin_Huang 評論0 收藏0
  • kubernetes安裝dashboard

    摘要:前言在安裝搭建的時候,往往會遇到各種各樣的問題,而安裝的展示組件則是困難中的困難,本人在實際搭建中則被整整卡住了天,和百度輪番搜索,各種技術博客和技術視頻反復研究才勉強搭建成功開始安裝在安裝好集群之后,確保集群各個節點都處于狀態的時候,就 前言 在安裝搭建k8s的時候,往往會遇到各種各樣的問題,而安裝k8s的web展示組件kubernetes-dashboard則是困難中的困難,本人在...

    darryrzhong 評論0 收藏0
  • Kubernetes之dashboard 2.x 部署

    摘要:開始部署項目地址創建證書創建命名空間創建文件證書請求自簽證書,指定證書的有效期天數。賦權,并復制,并登錄換成你環境的即可 開始部署Gitlab 項目地址:https://github.com/kubernetes/dashboard1) 創建證書:mkdir dashboard-certscd dashboard-cert...

    番茄西紅柿 評論0 收藏2637
  • 【容器云 UK8S】最佳實踐:權限管理之了解RBAC和權限管理實踐

    摘要:本文介紹了模型中四個最主要的對象,即,大致了解了的工作原理和使用方法,如果要更加深入地了解和掌握,可以查看官方文檔。只是這個不能復用到其他,一般只有在做精細化權限管理的時候,我們才會創建對象,比如一個只能查看名稱為的。了解RBAC簡介RBAC是一種基于角色來管理對計算機或網絡資源訪問策略的方法。我們知道,對K8S內所有API對象的操作都是通過訪問kube-apiserver來完成的,因此ku...

    Tecode 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<