阿里雲Serverless Kubernetes已經支援服務發現功能,目前支援內網SLB和Headless Service的服務發現。

關於雲解析PrivateZone

Alibaba Cloud DNS PrivateZone,是基於阿里雲Virtual Private Cloud(Virtual Private Cloud)環境的私人網域名稱解析和管理服務。您能夠在自訂的一個或多個專用網路中將私人網域名稱映射到IP資源地址,同時在其他網路環境無法訪問您的私人網域名稱。

前提條件

  1. 需要先開通Alibaba Cloud DNS PrivateZone,在Alibaba Cloud DNS控制台中開通。
  2. 您已成功建立一個 Serverless Kubernetes 叢集,參見建立 Serverless Kubernetes 叢集
  3. 您已成功串連到 Kubernetes 叢集,參見通過 kubectl 串連 Kubernetes 叢集

操作步驟

  1. 通過 kubectl 串連到 Kubernetes 叢集,執行如下命令,確認串連的叢集。
    kubectl cluster-info
     Kubernetes master is running at https://xxxxxx.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443
  2. 部署 deployment 和建立 Service。目前僅支援 Intranet Service 和 Headless Service。

    以 Intranet Service 為例。建立樣本nginx-deployment-basic.yaml檔案。

    vim nginx-deployment-basic.yaml

    範例模板如下所示,在yaml檔案中複製如下yaml代碼,然後執行 kubectl create -f nginx-deployment-basic.yaml命令進行建立。

    apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
     kind: Deployment
     metadata:
       name: nginx-deployment-basic
       labels:
         app: nginx
     spec:
       replicas: 2
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
           - name: nginx
             image: nginx:1.7.9               # replace it with your exactly <image_name:tags>
             ports:
             - containerPort: 80
     ---
     apiVersion: v1
     kind: Service
     metadata:
       name: nginx-service-intranet           #可通過服務名作為短網域名稱進行訪問
       annotations:                           ##添加註解
         service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
     spec:
       ports:
       - port: 80
         protocol: TCP
       selector:
         app: nginx
       type: LoadBalancer

    您也可建立 Headless Service 類型的服務,樣本模板如下。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service-headless
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: nginx
      clusterIP: None
  3. 執行以下命令,查看應用的健全狀態。
    kubectl get svc,pod,deployment
  4. 登入 Alibaba Cloud DNS控制台
  5. 在左側導覽列中單擊PrivateZone > Zone 列表,可看到該列表下自動產生一條記錄。


    您可在該 VPC 網路環境中通過私人網域名稱訪問Service(長網域名稱或者短網域名稱)。
    • 長網域名稱訪問:本例中是 nginx-service-intranet.$NAMESPACE.svc.cluster.local,其中$NAMESPACE為Serverless叢集 ID,在控制台上可以看到,也可以在pod的yaml檔案中通過環境變數得到。
      env:
             - name: NAMESPACE
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
    • 短網域名稱訪問:nginx-service-intranet 或 nginx-service-headless,即在yaml編排中定義的服務名。

更多資訊可參見serverless-k8s-examples