遷移至 v1 中繼資料伺服器端點

遷移作業總覽

如要遷移至 v1.0,請完成下列步驟:

  1. 將使用已淘汰中繼資料伺服器端點的 VM 執行個體識別出來

    如果您已建立 Google Kubernetes Engine 叢集,則須找出使用已淘汰端點的 GKE 節點

  2. 在識別出的 VM 執行個體或節點中,找出使用了已淘汰中繼資料伺服器端點的程序

    • 如果程序隸屬於您仍未開發的應用程式,請將應用程式更新為使用 v1 中繼資料伺服器端點。如需應更新的已知應用程式清單,請參閱需要更新的應用程式
    • 如果程序隸屬於您已開發的應用程式,您的程式碼也會呼叫任何舊版端點,請完成以下步驟:
      1. 瞭解 v1 與已淘汰中繼資料伺服器端點之間的差異。
      2. 更新查詢,以便使用 v1 中繼資料伺服器端點。
    • 如果程序隸屬於您已開發的應用程式,但您的程式碼不會向任何舊版端點發出要求,則要求可能是由 SDK 或其他依附元件產生。如要修正這個問題,請更新應用程式使用的所有 SDK 和依附元件。如要查看需要更新的 Google 資料庫版本,請參閱系統支援的資料庫版本
  3. (選用) 停用 v0.1 和 v1beta1 中繼資料伺服器端點。

    識別 VM 執行個體

    如要找出使用 v0.1 和 v1beta1 端點的 VM 執行個體,您可以向兩個新的端點發出要求。

    查詢這些新的端點之後,您可以在輸出內容中看見特定 VM 執行個體存取已淘汰端點的次數。注意事項:每當您停止 VM 執行個體時,系統都會重設計數器。

    如要瞭解 VM 執行個體是否已存取 v0.1 和 v1beta1 端點,請執行下列指令:

    curl -H "Metadata-Flavor: Google" computeMetadata/v1/instance/legacy-metadata-access/0.1
    curl -H "Metadata-Flavor: Google" computeMetadata/v1/instance/legacy-metadata-access/v1beta1
    

    識別 GKE 節點

    如要找出使用 v0.1 和 v1beta1 端點的 Google Kubernetes Engine 叢集節點,請參閱找出使用舊版中繼資料伺服器端點的工作負載

    識別程序

    識別出會向已淘汰中繼資料伺服器端點發出要求的 VM 執行個體之後,您可以在這些 VM 執行個體中找出會發出這些要求的程序。

    如要找出這些程序,請使用記錄或監控工具,例如 ngrepauditd

    ngrep

    您可以使用 ngrep (網路「grep」) 來收集封包,並篩選這些封包中的內容。如要針對會向已淘汰端點發出要求的程序收集封包資訊,請在 VM 執行個體中執行下列指令:

    sudo ngrep -l -q "v1beta1|0\.1/meta-data" tcp \
    and dst host 169.254.169.254 or metadata.google.internal \
    and dst port 80
    

    如果程序已對已淘汰的端點發出任何要求,系統會輸出類似於以下的內容:

    T 10.128.0.4:41312 -> 169.254.169.254:80 [AP]
    GET /computeMetadata/v1beta1/instance/id HTTP/1.1..Host: metadata.goog..User-Agent: curl/7.52.1..Accept: */*....
    

    輸出內容中會包含下列資訊:

    • 根網址:/computeMetadata/v1beta1/instance/id
    • 用來提出要求的使用者代理程式。在這個範例中為 curl/7.52.1
    • 要求來源 VM 執行個體的 IP 位址 (來源 IP) 和通訊埠。在這個範例中,IP 位址為 10.128.0.4,通訊埠則為 41312
    • 如果程序依然存在,您可以查看通訊埠資訊來找到程序 ID。

    查看通訊埠資訊

    下列作業找到的程序可能會含有未完成的擱置 HTTP GET 要求,並與現行和已淘汰的中繼資料端點進行通訊。

    如要列出以開放方式連結至中繼資料伺服器的通訊端清單,請在 VM 執行個體中執行以下指令:

    sudo lsof -n -P +c 0 -i @169.254.169.254

    輸出內容會類似以下內容:

    COMMAND         PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
    google_network_ 798 root    7u  IPv4 1674967626      0t0  TCP 10.128.0.4:44876->169.254.169.254:80 (ESTABLISHED)
    google_accounts 805 root    5u  IPv4 1674980506      0t0  TCP 10.128.0.4:44878->169.254.169.254:80 (ESTABLISHED)
    google_clock_sk 809 root    5u  IPv4 1674982496      0t0  TCP 10.128.0.4:44880->169.254.169.254:80 (ESTABLISHED)
    google_clock_sk 809 root    6u  IPv4 1674914460      0t0  TCP 10.128.0.4:44874->169.254.169.254:80 (CLOSE_WAIT)
    

    NAME 資料欄會顯示來源 IP、目的地 IP 和通訊埠。如果這些資料仍不足以辨識程序,您可以使用 ps 指令來查看詳細資訊。

    ps 798 805 809

    輸出內容會類似以下內容:

    PID TTY      STAT   TIME COMMAND
    798 ?        Ss     9:07 /usr/bin/python /usr/bin/google_network_daemon
    805 ?        Ss    14:19 /usr/bin/python /usr/bin/google_accounts_daemon
    809 ?        Ss     4:33 /usr/bin/python /usr/bin/google_clock_skew_daemon
    

    auditd (僅限 Linux)

    Auditd 是一種 Daemon,可以依據一組規則將稽核記錄寫入磁碟。只要為 connect 系統呼叫設定規則,即可找出連結至中繼資料伺服器已淘汰端點的各項程序。

    1. 如要設定規則來稽核 connect 系統呼叫,請在您的 VM 執行個體中執行以下指令:

      sudo auditctl -a exit,always -F arch=b64 -S connect -k CONNECT
    2. 如要查詢與已淘汰端點之間的連線,請在您的 VM 執行個體中執行以下指令:

      sudo ausearch -m SOCKADDR -k CONNECT --interpret | grep -C 3 'computeMetadata/v1beta1\|0\.1/meta-data'

      輸出內容可能會類似以下內容:

      type=PROCTITLE msg=audit(09/26/2019 22:20:21.498:847) : proctitle=curl metadata.goog/computeMetadata/v1beta1/instance/id
      type=SOCKADDR msg=audit(09/26/2019 22:20:21.498:847) : saddr={ fam=inet laddr=169.254.169.254 lport=80 }
      type=SYSCALL msg=audit(09/26/2019 22:20:21.498:847) : arch=x86_64 syscall=connect success=no exit=EINPROGRESS(Operation now in progress) a0=0x3 a1=0x7fffd965bd50 a2=0x10 a3=0x14856d3402026e items=0 ppid=27641 pid=28977 auid=alice uid=alice gid=alice euid=alice suid=alice fsuid=alice egid=alice sgid=alice fsgid=alice tty=pts9 ses=2828 comm=curl exe=/usr/bin/curl key=CONNECT
      

      輸出內容中會包含下列資訊:

      • 程序標題:proctitle
      • 要求網址:curl metadata.goog/computeMetadata/v1beta1/instance/id
      • 執行檔的所在位置:exe=/usr/bin/curl
      • 使用者:uid=alice

      找出程序之後,您即可刪除規則。如要刪除規則,請執行以下指令:

      sudo auditctl -d exit,always -F arch=b64 -S connect -k CONNECT

    v1beta1 和 v1.0 中繼資料伺服器端點之間的差異

    在功能方面,v1 中繼資料伺服器與先前的 v1beta1 伺服器略有不同。如果您使用了新的中繼資料伺服器,就必須在各項要求中提供 Metadata-Flavor: Google 標頭,藉此表示要求目的為擷取中繼資料值。

    更新要求來加入這個新標頭。舉例來說,傳送至 disks/ 屬性的要求現在會如下所示:

    user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
    

    v0.1 和 v1.0 中繼資料伺服器端點之間的差異

    一般來說,v0.1 中繼資料伺服器端點與 v1 的不同之處如下:

    • 用來查詢中繼資料伺服器端點的根目錄已從 http://metadata.google.internal/0.1/meta-data/ 變為 http://metadata.google.internal/computeMetadata/v1/
    • v1 中繼資料伺服器要求中必須包含 Metadata-Flavor: Google 標頭。舉例來說,傳送至 disks/ 屬性的要求現在會如下所示:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
    • 您可以在專案和執行個體層級查詢自訂中繼資料

      在 v0.1 中繼資料伺服器中,attributes/ 屬性的執行個體和專案中繼資料值位於同一個目錄。如果屬性同時含有執行個體和專案中繼資料值,系統就會傳回指定鍵的執行個體中繼資料值。

      以 v1 查詢來說,網址必須指定您要求的是執行個體或專案中繼資料。舉例來說,如要查詢 sshKeys 屬性,請執行下列一或兩項指令:

      針對在專案中設定的 sshKeys,請執行以下指令:

      curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/sshKeys" -H "Metadata-Flavor: Google"

      針對在這個執行個體中設定的 sshKeys,請執行下列指令:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/sshKeys" -H "Metadata-Flavor: Google"
    • v0.1 中的部分中繼資料項目會傳回 JSON 物件。在 v1 中繼資料伺服器中,這些中繼資料項目是按照目錄分類。透過這種項目分類方式,您可以查詢先前建立為巢狀欄位的索引項目和值。如要進一步瞭解如何查詢目錄清單或存取 v1 中的 JSON 物件,請參閱屬性目錄清單

    如需 v0.1 與 v1 中繼資料伺服器端點的對應關係詳細資料,請參閱下表。

    執行個體屬性

    系統會將下列中繼資料項目移至 instance/ 目錄:

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    說明 v0.1 description My instance description
    v1 instance/description
    主機名稱 v0.1 hostname my-instance.c.my-project.internal
    v1 instance/hostname
    映像檔 v0.1 image projects/eip-images/global/images/debian-9-drawfork-v20180109
    v1 instance/image
    機器類型 v0.1 machine-type projects/12345/machineTypes/n1-standard-1
    v1 instance/machine-type
    執行個體標記 v0.1 tags ["cheese", "lettuce"]
    v1 instance/tags
    區域 v0.1 zone projects/12345/zones/us-central1-c
    v1 instance/zone

    專案屬性

    系統會將下列中繼資料項目移至 project/ 目錄:

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    專案 ID v0.1 project-id my-project
    v1 project/project-id
    專案 ID (數值) v0.1 numeric-project-id 12345
    v1 project/numeric-project-id

    移動的屬性

    系統會將下列中繼資料項目移至新的端點:

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    網域 v0.1 domain c.my-project.internal
    v1 instance/hostname my-instance.c.my-project.internal

    重新命名的屬性

    系統會變更下列中繼資料項目的名稱:

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    執行個體 ID v0.1 instance-id 123456789
    v1 instance/id 123456789

    屬性目錄清單

    下列中繼資料項目在 v0.1 中會傳回 JSON 物件,在 v1 中則會歸入目錄。

    針對這些中繼資料項目,您可以使用以下方法來存取端點:

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    磁碟 v0.1 disks
    
    {"disks":[{
    "deviceName":"persistent-disk-0",
    "index":0,
    "mode":"READ_WRITE",
    "type":"PERSISTENT"}]}
    v1 instance/attached-disks/?recursive=true
    
    [{"deviceName": "persistent-disk-0",
    "index":0,
    "mode":"READ_WRITE",
    "type":"PERSISTENT"}]
    網路介面 v0.1 network
    
    {"networkInterface":
    [{"accessConfiguration":
    [{"externalIp":"35.194.6.47",
    "type":"ONE_TO_ONE_NAT"}],
    "ip":"10.128.0.4",
    "mac":"42:01:0a:80:00:04","mtu":1460,
    "network":"projects/12345/networks/default"}]}
    v1 instance/network-interfaces/?recursive=true
    
    [{"accessConfigs":
    [{"externalIp":"35.194.6.47",
    "type":"ONE_TO_ONE_NAT"}],
    "dnsServers":["169.254.169.254"],
    "forwardedIps":[],
    "gateway":"10.128.0.1",
    "ip":"10.128.0.4",
    "ipAliases [],
    "mac":"42:01:0a:80:00:04","mtu":1460,
    "network":"projects/12345/networks/default",
    "subnetmask":"255.255.240.0","targetInstanceIps":[]}]
    服務帳戶資訊 (所有服務帳戶) v0.1 service-accounts
    
    {"serviceAccounts":
    [{"scopes":["https://www.googleapis.com/auth/devstorage.read_only"],
    "serviceAccount":"12345-compute@developer.gserviceaccount.com"}]}
    v1 instance/service-accounts/?recursive=true
    
    {"123451-compute@developer.gserviceaccount.com":
    {"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]},
    "default":{"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]}}
    服務帳戶資訊 (單一服務帳戶) v0.1 service-accounts/<email|default>
    
    {"scopes":["https://www.googleapis.com/auth/devstorage.read_only"],
    "serviceAccount":"123451-compute@developer.gserviceaccount.com"}
    
    v1 instance/service-accounts/<email|default>/?recursive=true
    
    {"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]}
    

    查詢 OAuth 2.0 存取憑證

    下列中繼資料項目會傳回 OAuth2 存取憑證。

    v0.1 根目錄 - http://metadata.google.internal/0.1/meta-data/
    v1 根目錄 - http://metadata.google.internal/computeMetadata/v1
    中繼資料項目 版本 URI (相對於根目錄) 輸出範例
    OAuth2 憑證 v0.1 (方法 1)

    auth-token?service_account=<email|default>&scope=scopeA,scopeB

    auth_token?service_account=<email|default>&scope=scopeA,scopeB

    
    {"expires":1568854217,
    "oauth2_access_token":"ya29.c.KmyIB0i4tH1xLzKGrqeeK6TGWEW3b18Lcq...."}
    
    v0.1 (方法 2) service-accounts/<email|default>/acquire
    
    {"accessToken":"ya29.c.KmyIB0i4tH1xLNzKGrqeeK6TGWEW3b18Lcq.....",
    "expiresAt":1568854217,"expiresIn":2022}
    v1 instance/service-accounts/<email|default>/token
    
    {"access_token":"ya29.c.KmyIB0i4tH1xLNzKGrqeeK6TGWEW3b18Lcq....",
    "expires_in":2022,"token_type":"Bearer"}

    需要更新的應用程式

    如要使用 v1 中繼資料伺服器端點,您必須將下列應用程式更新為支援的最低版本以上。

    應用程式 支援的最低版本
    Facter (由 Puppet 開發) 3.14.5
    Stackdriver Monitoring 代理程式 5.5.2-375

    支援的資料庫版本

    部分 Google 資料庫不會因 v1 中繼資料伺服器端點的遷移作業而受到影響。不過,如果您使用的是下表中列出的任一資料庫,請確定已升級至支援的最低版本以上。

    語言 Google 資料庫 支援的最低版本
    Java com.google.api-client 1.18.0-rc
    Node.js google-cloud/debug-agent 3.0.0
    Node.js google-cloud/profiler 0.2.0
    Node.js google-cloud/trace-agent 2.11.0
    Node.js gcp-metadata 0.5.0
    Node.js gcs-resumable-upload 0.13.0
    Node.js googleapis 27.0.0
    Node.js google-auth-library 1.3.0
    Node.js google-cloud/bigquery 2.0.0
    Node.js google-cloud/bigquery-data-transfer 0.4.0
    Node.js google-cloud/bigtable 0.15.0
    Node.js google-cloud/cloud-container 0.3.0
    Node.js google-cloud/compute 0.11.0
    Node.js google-cloud/datastore 2.0.0
    Node.js dialogflow 0.6.0
    Node.js google-cloud/dlp 0.8.0
    Node.js google-cloud/dns 0.8.0
    Node.js google-cloud/error-reporting 0.5.0
    Node.js google-cloud/firestore 0.16.1
    Node.js google-cloud/language 2.0.0
    Node.js google-cloud/logging-bunyan 0.9.0
    Node.js google-cloud/logging 2.0.0
    Node.js google-cloud/logging-winston 0.10.0
    Node.js google-cloud/monitoring 0.6.0
    Node.js google-cloud/os-login 0.3.0
    Node.js google-cloud/pubsub 0.20.0
    Node.js google-cloud/redis 0.2.0
    Node.js google-cloud/resource 0.9.0
    Node.js google-cloud/spanner 2.0.0
    Node.js google-cloud/speech 2.0.0
    Node.js google-cloud/storage 2.0.0
    Node.js google-cloud/tasks 0.2.0
    Node.js google-cloud/text-to-speech 0.3.0
    Node.js google-cloud/translate 2.0.0
    Node.js google-cloud/vision 0.21.0
    Node.js google-cloud/profiler 0.2.0
    Node.js google-cloud/trace-agent 2.11.0
    Node.js google-gax 0.17.0
    Node.js gce-images 1.0.0
    Node.js gcp-metadata 0.5.0
    Node.js gcs-resumable-upload 0.13.0
    Node.js googleapis 27.0.0
    Node.js google-auth-library 1.3.0
    Node.js google-cloud/bigquery 2.0.0
    Node.js google-cloud/bigquery-data-transfer 0.4.0
    Node.js google-cloud/bigtable 0.15.0
    Node.js google-cloud/cloud-container 0.3.0
    Node.js google-cloud/common 0.18.0
    Node.js google-cloud/common-grpc 0.7.0
    Node.js google-cloud/compute 0.11.0
    Node.js google-cloud/datastore 2.0.0
    Node.js dialogflow 0.6.0
    Node.js google-cloud/dlp 0.8.0
    Node.js google-cloud/dns 0.8.0
    Node.js google-cloud/error-reporting 0.5.0
    Node.js google-cloud/firestore 0.16.1
    Node.js google-cloud/language 2.0.0
    Node.js google-cloud/logging 2.0.0
    Node.js google-cloud/logging-bunyan 0.9.0
    Node.js google-cloud/logging-winston 0.10.0
    Node.js google-cloud/monitoring 0.6.0
    Node.js google-cloud/os-login 0.3.0
    Node.js googleapis/nodejs-pubsub 0.20.0
    Node.js google-cloud/redis 0.2.0
    Node.js google-cloud/resource 0.9.0
    Node.js google-cloud/spanner 2.0.0
    Node.js google-cloud/speech 2.0.0
    Node.js google-cloud/storage 2.0.0
    Node.js google-cloud/tasks 0.2.0
    Node.js google-cloud/text-to-speech 0.3.0
    Node.js google-cloud/translate 2.0.0
    Node.js google-cloud/video-intelligence 1.3.0
    Node.js google-cloud/vision 0.21.0
    PHP google-cloud/video-intelligence 1.3.3
    Python oauth2client 2.0.0
    Python google-api-python-client 1.6.0
    Python googleapis/google-cloud-python 0.10.0
    Python google-cloud-happybase 0.20.0
    Ruby gcloud 0.11.1
    Ruby google-api-client 0.8.6
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件