Rancher_APIを使う時に注意したこと

Bfc0b8fb604cd300dd1b0b52e947af88?s=47 Shogo Seki
September 20, 2019

 Rancher_APIを使う時に注意したこと

Bfc0b8fb604cd300dd1b0b52e947af88?s=128

Shogo Seki

September 20, 2019
Tweet

Transcript

  1. Rancher APIを使う時に 注意したこと Rancher Meetup #03 in Kyoto 2019.09.20

  2. Shogo Seki カゴヤ・ジャパン株式会社 Rancher, Laravel, Vue.js, Docker Monitoring, CI/CD, GitOps

  3. 籠屋 京子 (Kagoya Kyoko) 広報部@カゴヤ・ジャパン株式会社 @kagoya_kyoko

  4. 少し宣伝させてください

  5. None
  6. None
  7. KAGOYA CLOUD コンテナサービス をリリースしました〜

  8. 以上

  9. Rancher APIを使う時に 注意したこと Rancher Meetup #03 in Kyoto 2019.09.20

  10. Case1: Create Cluster API

  11. 〜ある日〜 A「クラスター名のバリデーション追加しておいて!」 S「わかりました」 S「(クラスター名はRancherの画面からも設定できるし、そこで入力チェックしちゃえ!)」 入力フォームさん「 」 S「(なるほど、なるほど)」

  12. Send curl -X POST ¥ https://localhost/v3/cluster ¥ -H 'Content-Type: application/json'

    ¥ -H 'Authorization: Bearer token-XXXXX:XXXXXXXXXX' ¥ -d '{ "type": "cluster", ... "name": "ABCDEFG" }'
  13. Response { "baseType": "error", "code": "InvalidFormat", "fieldName": "name", "message": "InvalidFormat

    422: invalid value ABCDEFG: a DNS-1123 label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character (e.g. 'my-name', or '123-abc', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?')", "status": 422, "type": "error" } error!?
  14. Response { "baseType": "error", "code": "InvalidFormat", "fieldName": "name", "message": "InvalidFormat

    422: invalid value ABCDEFG: a DNS-1123 label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character (e.g. 'my-name', or '123-abc', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?')", "status": 422, "type": "error" } めっちゃ親切やん///
  15. Case1: まとめ • API使うならちゃんとAPIでテストしてからコード化しよう • エラーメッセージが親切なのでエラー出してみよう

  16. Case2: Get CAcert API

  17. sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v

    /var/run:/var/run rancher/rancher-agent:latest --server https://localhost --token thmmxq9tjlkjsdfkwmbtsa4bnf2p2lv1l72fazfnt4sdf94ln8fctgg --ca-checksum 29a149e0319ddcc7f8c679d08de07471208bc54186a9e5749bd840befcf742ac --worker
  18. Send curl -X GET ¥ https://localhost/v3/settings/cacerts ¥ -H 'Authorization: Bearer

    token-XXXXX:XXXXXXXXXX'
  19. Response { "baseType": "setting", ... "id": "cacerts", ... "value": "-----BEGIN

    CERTIFICATE-----¥n XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¥n -----END CERTIFICATE-----" }
  20. checksumの求め方(公式より) checksumはvalueに対してsha256で求めればええんやな! https://rancher.com/adding-custom-nodes-kubernetes-cluster-rancher-2-0-tech-preview-2/ curl -s -H "Authorization: Bearer $APITOKEN" https://127.0.0.1/v3/settings/cacerts

    --insecure | jq -r .value | sha256sum | awk '{ print $1 }'
  21. やってみる(失敗) $response = $client->request(...); $responseBody = $response->getBody(); hash('sha256', $responseBody['value']); これだとノード追加コマンドのca-checksum値と一致しない・・・

  22. checksumの求め方(公式より) curl -s -H "Authorization: Bearer $APITOKEN" https://127.0.0.1/v3/settings/cacerts --insecure |

    jq -r .value | sha256sum | awk '{ print $1 }' これ怪しい
  23. jq Manual • --raw-output / -r: With this option, if

    the filter’s result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes. This can be useful for making jq filters talk to non-JSON-based systems. • --join-output / -j: Like -r but jq won’t print a newline after each output. https://stedolan.github.io/jq/manual/
  24. jq Manual • --raw-output/ -r: このオプションを使用すると、フィルターの結果が文字列の場合、引用符付きのJSON文 字列としてフォーマットされるのではなく、標準出力に直接書き込まれます。これは、 jqフィルターが非JSONベースのシステムと通信するのに役立ちます。 • --join-output/

    -j: -rに似ていますが、jqは各出力の後に改行を出力しません。 https://stedolan.github.io/jq/manual/ 書いてることは怪しいが・・・ -r : 改行コードあり -j : 改行コードなし
  25. やってみる(成功) $response = $client->request(...); $responseBody = $response->getBody(); hash('sha256', $response['value']."¥n"); 間違ってるようにも見えるけど、これが正解

    ちなみにissueもあったが、closeされているため、仕様っぽい https://github.com/rancher/rancher/issues/13308
  26. Case2: まとめ • 使われているコマンドを調べて見よう • ドキュメントを読もう • ついでに探せたらissueも読もう • ソースコードも読むと更に良い

    ◦ https://github.com/rancher/rancher/blob/master/pkg/systemtemplate/import.go#L52
  27. ご清聴ありがとうございました