Ambassador系列-11-Helm安裝Ambassador Edge Stack 1.1.0

Ambassador已經發布1.1.0版本,其中最大的變化就是將原來的版本Ambassador和Ambassador Pro版本拆爲三個版本:Ambassador API Gateway、Ambassador Edge Stack Community和Ambassador Edge Stack Enterprise。其中Ambassador API Gateway對應0.x版本的Ambassador,Ambassador Edge Stack對應o.x版本的Ambassador Pro,其中Ambassador Edge Stack Community是企業版本的試用版,Ambassador Edge Stack Enterprise是正式的企業版。

從Ambassador的文檔和部署方式看,Ambassador的重點放在了Ambassador Edge Stack版本了,Ambassador的缺省部署版本改爲Ambassador Edge Stack Community,主要是爲了推廣其企業版本。以下爲各個版本的特性列表。
Editions
下面介紹Ambassador Edge Stack Community的Helm部署。增加Helm倉庫。

helm repo add datawire https://www.getambassador.io

helm search repo ambassador
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
aliyuncs/ambassador     4.4.7           0.85.0          A Helm chart for Datawire Ambassador
datawire/ambassador     6.1.1           1.1.0           A Helm chart for Datawire Ambassador
stable/ambassador       5.3.0           0.86.1          A Helm chart for Datawire Ambassador

先創建ambassador命名空間。

kubectl create namespace ambassador

安裝Ambassador Edge Stack,將Admin和Proxy服務改爲NodePort,使得Kubernetes集羣外可以訪問。忽略提示信息:manifest_sorter.go:175: info: skipping unknown hook: “crd-install”。

helm install ambassador --namespace ambassador datawire/ambassador \
  --set adminService.type=NodePort \
  --set service.type=NodePort
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
NAME: ambassador
LAST DEPLOYED: Sat Feb  8 06:01:35 2020
NAMESPACE: ambassador
STATUS: deployed
REVISION: 1
NOTES:
-------------------------------------------------------------------------------
Congratulations! You have successfully installed The Ambassador Edge Stack!
-------------------------------------------------------------------------------
NOTE: You are currently running The Ambassador Edge Stack in EVALUATION MODE.

Request a free community license key at https://SERVICE_IP/edge_stack_admin/#dashboard
to unlock all the features of The Ambassador Edge Stack and update the value of
licenseKey.value in your values.yaml file.
-------------------------------------------------------------------------------
WARNING:

With your installation of the Ambassador Edge Stack, you have created a:

- AuthService named ambassador-auth

- RateLimitService named ambassador-ratelimit

in the ambassador namespace.

Please ensure there is not another of these resources configured in your cluster.
If there is, please either remove the old resource or run

helm upgrade ambassador -n ambassador --set authService.create=false --set RateLimit.create=false

For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.

查看創建的CRDs。

kubectl get crds
NAME                                           CREATED AT
authservices.getambassador.io                  2020-02-07T22:01:30Z
consulresolvers.getambassador.io               2020-02-07T22:01:30Z
filterpolicies.getambassador.io                2020-02-07T22:01:31Z
filters.getambassador.io                       2020-02-07T22:01:30Z
hosts.getambassador.io                         2020-02-07T22:01:31Z
kubernetesendpointresolvers.getambassador.io   2020-02-07T22:01:31Z
kubernetesserviceresolvers.getambassador.io    2020-02-07T22:01:31Z
logservices.getambassador.io                   2020-02-07T22:01:31Z
mappings.getambassador.io                      2020-02-07T22:01:31Z
modules.getambassador.io                       2020-02-07T22:01:31Z
ratelimits.getambassador.io                    2020-02-07T22:01:31Z
ratelimitservices.getambassador.io             2020-02-07T22:01:31Z
tcpmappings.getambassador.io                   2020-02-07T22:01:32Z
tlscontexts.getambassador.io                   2020-02-07T22:01:32Z
tracingservices.getambassador.io               2020-02-07T22:01:32Z

查看Ambassador資源,可以看出增加了ambassador-redis,Ambassador依靠Redis來暫存的身份驗證憑據和速率限制等信息,所以內置了Redis服務。也可以看出Ambassador鏡像已經改爲aes:1.1.0,AES爲Ambassador Edge Stack的簡寫。

kubectl get all -nambassador -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
pod/ambassador-86bbd7456d-2k8q2         1/1     Running   2          12m   10.244.1.2   k8s-node1   <none>           <none>
pod/ambassador-86bbd7456d-4xj5n         1/1     Running   0          12m   10.244.1.4   k8s-node1   <none>           <none>
pod/ambassador-86bbd7456d-sjds6         1/1     Running   2          12m   10.244.2.4   k8s-node2   <none>           <none>
pod/ambassador-redis-8556cbb4c6-pj596   1/1     Running   0          12m   10.244.1.3   k8s-node1   <none>           <none>

NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
service/ambassador         NodePort    10.1.106.113   <none>        80:35643/TCP,443:17699/TCP   12m   app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador
service/ambassador-admin   NodePort    10.1.245.71    <none>        8877:30549/TCP               12m   app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador
service/ambassador-redis   ClusterIP   10.1.1.37      <none>        6379/TCP                     12m   app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador-redis

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                       SELECTOR
deployment.apps/ambassador         3/3     3            3           12m   ambassador   quay.io/datawire/aes:1.1.0   app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador
deployment.apps/ambassador-redis   1/1     1            1           12m   redis        redis:5.0.1                  app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador-redis

NAME                                          DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                       SELECTOR
replicaset.apps/ambassador-86bbd7456d         3         3         3       12m   ambassador   quay.io/datawire/aes:1.1.0   app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador,pod-template-hash=86bbd7456d
replicaset.apps/ambassador-redis-8556cbb4c6   1         1         1       12m   redis        redis:5.0.1                  app.kubernetes.io/instance=ambassador,app.kubernetes.io/name=ambassador-redis,pod-template-hash=8556cbb4c6

打開瀏覽器,訪問proxy端口,http和https都會引導訪問Edge Policy Console。

http://192.168.1.55:35643/
https://192.168.1.55:17699/

Edge Policy Console

點擊上圖的藍色鏈接,提示要打開Edge Policy Console的話,需要安裝edgectl,點擊下載Linux edgectl,並上傳到Master節點。

https://192.168.1.55:17699/edge_stack/admin/#dashboard
https://metriton.datawire.io/downloads/linux/edgectl

Edge Policy Console

將edgectl移到Shell PATH中,此處移到/usr/local/bin目錄,並修改執行權限,並登陸Edge Policy Console。

mv edgectl /usr/local/bin/
chmod a+x /usr/local/bin/edgectl

edgectl login --namespace=ambassador 192.168.1.55:17699
Connecting to the Ambassador Edge Stack admin UI in this cluster...
Unexpected error while trying to open your browser.
Visit the following URL to access the Ambassador Edge Stack admin UI:
     https://192.168.1.55:17699/edge_stack/admin/#eyJhbGciOiJQUzUxMiIsInR5cCIXXXXXXXXX.eyJsb2dpbl90b2tlblXXXXXXXXXXXjoidjEiLCJleHAiOjE1ODExMTY2NjYsImlhdCI6MTU4MTExNDg2NiwibmJmIjXXXXXXXXXXXXXXXXX.WcvB8HZtq2MehbMxXYc3pXTvGMzN6r0crXXXXXXXXXXXXXXXXAZ3I5VmrCeNGzq1e9ROWNyqhQFkwHoHTbNF8__vOMJOqHGUrgZROTPa2QFdy9xhS9f40owhHRoppglj6oqZae1aW9IqMF-s8f-nkjwjOw34-EpjuZ4wEJYjkQUN2G6_YwDo8IKPeM1qCKo6NJwmXBY5qCa3E8cupy-BI1fIE36ENc_rKxeM6H-sU_GfLQ35CLGf-gAKXXXXXXQRvW4it9NB2_zeJ9pQje-2NnYRfKfh_GEVDpfPVPFJbJxrx0LLmImrT1x7qlIKh0RGAgXXXXXXXXXXXXXXXXXXXXXXXXXXX
Error: browse: exec: "xdg-open": executable file not found in $PATH

打開瀏覽器,訪問以上給出的鏈接,真正打開了Edge Policy Console。

https://192.168.1.55:17699/edge_stack/admin/#eyJhbGciOiJQUzUxMiIsInR5cCIXXXXXXXXX.eyJsb2dpbl90b2tlblXXXXXXXXXXXjoidjEiLCJleHAiOjE1ODExMTY2NjYsImlhdCI6MTU4MTExNDg2NiwibmJmIjXXXXXXXXXXXXXXXXX.WcvB8HZtq2MehbMxXYc3pXTvGMzN6r0crXXXXXXXXXXXXXXXXAZ3I5VmrCeNGzq1e9ROWNyqhQFkwHoHTbNF8__vOMJOqHGUrgZROTPa2QFdy9xhS9f40owhHRoppglj6oqZae1aW9IqMF-s8f-nkjwjOw34-EpjuZ4wEJYjkQUN2G6_YwDo8IKPeM1qCKo6NJwmXBY5qCa3E8cupy-BI1fIE36ENc_rKxeM6H-sU_GfLQ35CLGf-gAKXXXXXXQRvW4it9NB2_zeJ9pQje-2NnYRfKfh_GEVDpfPVPFJbJxrx0LLmImrT1x7qlIKh0RGAgXXXXXXXXXXXXXXXXXXXXXXXXXXX

Edge Policy Console

從上圖的License區域可以看出,當前是評估模式,點擊“Get a free Community license.”可以獲取Ambassador Edge Stack Community License。輸入郵件地址,點擊Sign up按鈕,會提示給郵箱發送了Ambassador Edge Stack Community License。訪問郵箱,獲取註冊碼。然後在master節點註冊。

edgectl license -n ambassador eyJhbGciOiJQUzUxMiIsXXXXXXXXXXXXXX.eyJsaWNlbnNlX2tleV92ZXJzaW9uIjoidjIiLCJjdXN0b21lcl9pZCI6InR3aW5nYW9Ac2luYS5jbiIsImN1c3RvbWVyX2VtYWlsIjoidHdpbmdhb0BzaW5hLmNuIiwiZW5hYmxlZF9mZWF0dXJlcyI6WyIiLCJmaWx0ZXIiLCJyYXRlbGltaXQiLCJ0cmFmZmlXXXXXXXXXXXXXGFsIl0sImVuZm9yY2VkX2xpbWl0cyI6W3sibCI6ImRldnBvcnRhbC1zZXJ2aWNlcyIsInYiOjV9LHsibCI6InJhdGVsaW1pdC1zZXJ2aWNlIiwidiI6NX0seyJsIjoiYXV0aGZpbHRlci1zZXJ2aWNlIiwidiI6NX1dLCJtZXRhZGF0YSI6e30sImV4cCI6MTYxMjUzMDk4NCwiaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.TKBPqYGitumz5iSbFQq8EN9KN_BAqCJs9x03K6W3WBJxUx4fpXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDvAUtL__7PYfTS-17Jq0ZJygOAC8hGtrOz8iCw--oFkAhpZ14mvc0-CpZEn0DgKAHel0WQY7nYGQ6aEh2GYQG80rf3KBSxZwbp-sawBANArwvCvWw1W_5tSpBy3FBG33J0IIb2rS9lAuFr0ZvVdocJr5vIKb1KQAH3Ww9sxLKfFdFOLN_5fUIsFiAOYiPuo0hpQp1BbIllxCYrKAMigXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
secret/ambassador-edge-stack configured
Please wait a minute or two for your license to be refreshed in your running Ambassador Edge Stack.

等一分鐘左右,Edge Policy Console Dashboard頁面的License提示會自動消失。

下面我們嘗試創建一個Kubernetes的Service和Ambassador的Mapping。

vi echo-service.yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: echo
  name: echo
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: echo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: echo
  name: echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
      - name: echo
        image: e2eteam/echoserver:2.2
        ports:
        - containerPort: 8080
        env:
          - name: NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP

vi echo-mapping.yaml
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  name: echo-mapping
spec:
  prefix: /foo
  service: echo:8080

kubectl apply -f echo-service.yaml
kubectl apply -f echo-mapping.yaml

訪問https,發現Ambassador代理了echo服務的訪問。

curl -i https://192.168.1.55:17699/foo -k
HTTP/1.1 200 OK
date: Fri, 07 Feb 2020 23:02:02 GMT
content-type: text/plain
server: envoy
x-envoy-upstream-service-time: 5
transfer-encoding: chunked


Hostname: echo-75cf96d976-q8vhj

Pod Information:
        node name:      k8s-node2
        pod name:       echo-75cf96d976-q8vhj
        pod namespace:  default
        pod IP: 10.244.2.5

Server values:
        server_version=nginx: 1.14.2 - lua: 10015

Request Information:
        client_address=10.244.2.4
        method=GET
        real path=/
        query=
        request_version=1.1
        request_scheme=http
        request_uri=http://192.168.1.55:8080/

Request Headers:
        accept=*/*
        content-length=0
        host=192.168.1.55:17699
        user-agent=curl/7.29.0
        x-envoy-expected-rq-timeout-ms=3000
        x-envoy-internal=true
        x-envoy-original-path=/foo
        x-forwarded-for=10.244.0.0
        x-forwarded-proto=https
        x-request-id=49720520-2d85-4747-86e5-3206d460273d

Request Body:
        -no body in request-

訪問http,發現被https重定向了,應該缺省配置了https重定向,但我們的https缺省端口不是443,所以不能訪問。

curl -i http://192.168.1.55:35643/foo
HTTP/1.1 301 Moved Permanently
location: https://192.168.1.55:35643/foo
date: Fri, 07 Feb 2020 23:03:33 GMT
server: envoy
content-length: 0

也可以訪問admin端口。

http://192.168.1.55:30549/ambassador/v0/diag/

Ambassador系列文章

Ambassador系列-01-介紹、安裝和使用

Ambassador系列-02-Module模塊

Ambassador系列-03-服務配置和服務發現

Ambassador系列-04-服務配置Mapping

Ambassador系列-05-負載均衡

Ambassador系列-06-金絲雀發佈、斷路器、CORS和流量鏡像

Ambassador系列-07-TCP映射TCPMapping

Ambassador系列-08-TLS配置-HTTPS重定向和TLS終結

Ambassador系列-09-AuthService認證服務

Ambassador系列-10-RateLimitService限速服務

Ambassador系列-11-Helm安裝Ambassador Edge Stack 1.1.0

發佈了49 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章