HTTPのREST APIのアクセスクラスタのkubernetesを使用します

シリーズカタログ

Kubernetesクラスタでは、APIサーバは、入り口のクラスタ管理APIのKUBE-apiserverという名前のマスターノード上で実行中のプロセスが提供するサービスです。ユーザーがAPIを入力することを許可することができるkubectl、クライアントライブラリまたはHTTP残り、ユーザーまたはサービスアカウントでAPIを入力することができます。リクエストがAPIを到着すると、多くの場合、一般的なアプリケーション・クラスターでは、セキュリティコントロールのいくつかの段階を経る、API Serverは、多くの場合、自己署名証明書を使用するHTTPSサービス、オープン認証と承認のセキュリティメカニズムを提供します。

一般的に、Kubernetesクラスタ構造の後、公式kubectlツールやAPIサーバーの相互作用を使用することに加えて、我々はまた、ポストマンやカールを使用することができ、そして時には直接、適切なアクセス許可を作成するには、通常の必要性と対話するために、より強力な、APIサーバーをカールServiceAccountなどの関連リソースClusterRole /役割、ClusterRoleBinding / RoleBindingに与えられたその操作権限によって、このServiceAccount、および対応するトークンサービスアカウントのAPI Serverは、基本的な認証のために使用されます。その自己署名証明書によって要求されたときAPI Serverとの相互作用がTLSに基づいており、また、もちろん、あなたはまた、非セキュアAPIサーバーを接続することができ、必要ですが、お勧めしません。

作成ServiceAccount

以前の私たちは、後でServiceAccountを作成し、自動的にその秘密(鍵)の関連付けを作成したユーザに上陸した伝統的に似ているServiceAccount、上の話しました

私たちは、というファイルを作成apiviewerServiceAccountを

[centos@k8s-master ~]$ kubectl create sa apiviewer
serviceaccount/apiviewer created

私たちは、このSAが秘密の名前を対応する見ることができます

[centos@k8s-master ~]$ kubectl get sa apiviewer  -ojson
{
    "apiVersion": "v1",
    "kind": "ServiceAccount",
    "metadata": {
        "creationTimestamp": "2019-05-27T08:09:56Z",
        "name": "apiviewer",
        "namespace": "default",
        "resourceVersion": "16750207",
        "selfLink": "/api/v1/namespaces/default/serviceaccounts/apiviewer",
        "uid": "d078f034-8056-11e9-99bc-0050568417a2"
    },
    "secrets": [
        {
            "name": "apiviewer-token-z5bpq"
        }
    ]
}

私たちは、使用できるsecretes内部をname分泌するの値を参照してください

apiviewer-token-z5bpq[centos@k8s-master ~]$ kubectl describe secret apiviewer-token-z5bpq
Name:         apiviewer-token-z5bpq
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: apiviewer
              kubernetes.io/service-account.uid: d078f034-8056-11e9-99bc-0050568417a2

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImFwaXZpZXdlci10b2tlbi16NWJwcSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhcGl2aWV3ZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkMDc4ZjAzNC04MDU2LTExZTktOTliYy0wMDUwNTY4NDE3YTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDphcGl2aWV3ZXIifQ.GUd7uCwTntMXhwXEGFvo62tJBTVdI_SNATDIbuxINmbmBI2bjHuQ-whRE5183AXqWiifoM0HjOGoams11f_R2Dtak3fRxPLNRGGFTMyUN1uHmwedPmsAK0GTW0xPgInyIy4SF-uI7lghrpsRzBQ4AmA2AuctwCGdXUC3YuqrZPEnla3HeF6Tz72KpddlgiA3N1T5yvoOHPL4AgQRDPGKJ6L-nEdXumg3BlTWR0ENBNgzAz2eh6RZLRSsKlG0zQ8vhApkMGru7k5a_PKkU3Z3b0ZhKBKmE_LsMJ7bAunr9J9bbG--Id4rnuPpcj1DoJ0ZlJ3G1IP3xTUVncxO_gV4VQ

私たちは、熟練したコマンドを使用することができます

apiviewer-token-z5bpq[centos@k8s-master ~]$ kubectl describe secret `kubectl get sa apiviewer -ojsonpath='{.secrets[0].name}'`
Name:         apiviewer-token-z5bpq
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: apiviewer
              kubernetes.io/service-account.uid: d078f034-8056-11e9-99bc-0050568417a2

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImFwaXZpZXdlci10b2tlbi16NWJwcSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhcGl2aWV3ZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkMDc4ZjAzNC04MDU2LTExZTktOTliYy0wMDUwNTY4NDE3YTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDphcGl2aWV3ZXIifQ.GUd7uCwTntMXhwXEGFvo62tJBTVdI_SNATDIbuxINmbmBI2bjHuQ-whRE5183AXqWiifoM0HjOGoams11f_R2Dtak3fRxPLNRGGFTMyUN1uHmwedPmsAK0GTW0xPgInyIy4SF-uI7lghrpsRzBQ4AmA2AuctwCGdXUC3YuqrZPEnla3HeF6Tz72KpddlgiA3N1T5yvoOHPL4AgQRDPGKJ6L-nEdXumg3BlTWR0ENBNgzAz2eh6RZLRSsKlG0zQ8vhApkMGru7k5a_PKkU3Z3b0ZhKBKmE_LsMJ7bAunr9J9bbG--Id4rnuPpcj1DoJ0ZlJ3G1IP3xTUVncxO_gV4VQ

もちろん、あなたはまた、ツールJQを使用することができます

[centos@k8s-master ~]$ kubectl describe secret `kubectl get sa apiviewer -ojson|jq -r  .secrets[].name`
Name:         apiviewer-token-z5bpq
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: apiviewer
              kubernetes.io/service-account.uid: d078f034-8056-11e9-99bc-0050568417a2

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImFwaXZpZXdlci10b2tlbi16NWJwcSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhcGl2aWV3ZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkMDc4ZjAzNC04MDU2LTExZTktOTliYy0wMDUwNTY4NDE3YTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDphcGl2aWV3ZXIifQ.GUd7uCwTntMXhwXEGFvo62tJBTVdI_SNATDIbuxINmbmBI2bjHuQ-whRE5183AXqWiifoM0HjOGoams11f_R2Dtak3fRxPLNRGGFTMyUN1uHmwedPmsAK0GTW0xPgInyIy4SF-uI7lghrpsRzBQ4AmA2AuctwCGdXUC3YuqrZPEnla3HeF6Tz72KpddlgiA3N1T5yvoOHPL4AgQRDPGKJ6L-nEdXumg3BlTWR0ENBNgzAz2eh6RZLRSsKlG0zQ8vhApkMGru7k5a_PKkU3Z3b0ZhKBKmE_LsMJ7bAunr9J9bbG--Id4rnuPpcj1DoJ0ZlJ3G1IP3xTUVncxO_gV4VQ

ClusterRole、RoleBindingの作成

で我々はできる、我々は最初からClusterRoleを作成することができますが、K8Sのデフォルトのクラスタは、いくつかのClusterRoleがありkubectl get clusterrole、ここで、我々はと呼ばれるプログラムを使用し、参照する必要がclusterrole何をcluster-admin、新たに作成され、それがバインドされているServiceAccountを

RoleBinding作成し、次のコマンド

[centos@k8s-master ~]$  kubectl create rolebinding apiadmin --clusterrole cluster-admin --serviceaccount default:apiviewer
rolebinding.rbac.authorization.k8s.io/apiadmin created

获取ベアラートークン、証明書、APIサーバのURL

[centos@k8s-master ~]$ SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} -ojsonpath='{.secrets[0].name}')

このコマンドは、上記の私たちが持っていた言及したSECRETの名前を取得するために使用されます。

その後、我々は持っていたにも先に述べたように、トークンを取得するための名前の秘密を使用することができます

TOKEN=$(kubectl get secret ${SECRET} -ojsonpath='{.data.token}'|base64 -d)

jsonpathを使用している場合、私たちは事前にJSONの構造を知っておく必要があり、愚かしばしば非常に効果的なアプローチは、すべての出力全体のJSONうちの最初の、そして構造の後、傍受にあります。

トークンは、このようにBASE64のデコードを必要とする、base64エンコードした後であるので

証明書でアウト秘密から、次の抜粋

 kubectl get secret ${SECRET} -o jsonpath="{.data['ca\.crt']}" | base64 -d > /tmp/ca.crt

APIサーバのURLを取得し、APIサーバーが複数のマスターに配備されている場合、ちょうどそれらのいずれかになりますをご覧ください。
APISERVER = https://で$(kubectl -nデフォルトのgetエンドポイントkubernetes --no-ヘッダ| awkは'{$ 2印刷}' |カット-d "" 1 -f)

ポッドは、JQの-rですべての名前を抽出します

curl -s $APISERVER/api/v1/namespaces/default/pods/ --header "Authorization: Bearer $TOKEN" \
> --cacert /tmp/ca.crt  | jq -r '.items[].metadata.name'

このコマンドをkubectlされていないので、それはもはやjsonpath結果から直接フィルタすることはできない、ここで我々はまた、記載されているこの章の前部にJQ。JQツールをフィルタリングするためのツールを使用しています。を参照することができ、子供の靴の詳細については。

おすすめ

転載: www.cnblogs.com/tylerzhou/p/11094872.html