Kuidas luua API-lüüsi Kuberneteses asuva suursaadiku abil

API Gateway, kasutades suursaadikut Kubernetes

API-lüüs on oluline aspekt teie teenuste Kubernetes-i juurutamisel. See toimib ühe sisenemispunktina ja aitab lihtsustada paljusid ülesandeid, näiteks teenuse otsimine, hajutatud jälgimine, marsruutimine, kiiruse piiramine. See võib pakkuda teie teenustele suurt paindlikkust ja paremat konfigureerimist.

Saadik on üks praegu väga populaarsetest API-lüüsidest, mis suudab toime tulla suurte koormustega. Kubernetes on suursaadik Envoy kasutamiseks kõige populaarsem ja tõhusam viis.

Täna tutvun teile üksikasjalike sammudega, kuidas suursaadik lähetada Kubernetese klastrisse, mille me eelmises postituses kasutusele võtsime, ja konfigureerin selle kasutama sissetuleva liikluse jaoks AWS-i koormuse tasakaalustajat ja suunama selle reeglite alusel erinevatele teenustele.

See postitus avaldati algselt minu blogis https://krish512.com/create-api-gateway-ambassador-kubernetes/

Eeltingimused

Enne selle juhendi alustamist vajate järgmist:

  • Kubernetes klastri kohta nagu mu eelmine postitus
  • SSL-sertifikaat, mis kasutab domeeni jaoks ACM-i
  • Juurutusserverina Linuxi masin, eelistatavalt Ubuntu 16.04 või uuem

1. samm - saatke suursaadik Kubernetesi klastrisse

Suursaadiku lähetamine on Kubernetes'iga kõige lihtsam, kuna YAML-i konfiguratsioon on suursaadiku saidil hõlpsasti saadaval. Kui olete viidanud minu eelmisele artiklile Kubernetes'i klastri loomise kohta AWS-is, siis on teil juba RBAC lubatud.

Vaadake suursaadiku ametlikku dokumentatsiooni juhuks, kui teil pole RBAC-i lubamist või ülaltoodud käsuga seotud probleeme.

Logige sisse oma juhtserverisse ja täitke järgmine kubectl käsk,

kubectl apply -f https://getambassador.io/yaml/ambassador/ambassador-rbac.yaml

Suursaadiku lähetamiseks võite kasutada ka Helmi.

Esiteks lisage Helmi repo, mida haldab Datawire (suursaadikute meeskond)

$ helm repo lisada datawire https://www.getambassador.io

Nüüd lähetage suursaadik koos Helmiga,

$ helmi versiooniuuendus - installige - oodake suursaadiku andmejuhet / suursaadikut

See võtab natuke aega ja suursaadiku juurutamine ning kaustade loomine teie vaikenime nimeruumi. Järgmise käsu abil saate kontrollida, kas kausid on loodud,

$ kubectl saavad kausid

Eeldatakse järgmist väljundit

NIMI VALMIS STAATUSE TAASTAB VANUS
ambassador-6dfd64dd49-dgmcf 2/2 Jooksmine 0 1d
ambassador-6dfd64dd49-mz5bf 2/2 Jooksmine 0 1d
ambassador-6dfd64dd49-xd6g4 2/2 Jooksmine 0 1d

Kui näete, et 3 suursaadiku taset töötab, siis olete suursaadiku edukalt seadistanud. Liigume järgmise sammu juurde, kus loome koormuse tasakaalustaja lõpp-punkti, et kuvada meie API-lüüsi.

2. samm - looge suursaadikute teenus ja laadimissüsteem

Kogu meie Kubernetes'i teenustele saabuv liiklus tuleb suunata meie API Gateway suursaadiku kaudu.

Suursaadik kasutab kogu liikluse vastuvõtmiseks AWS-i koorma tasakaalustajat ja suunab nad suursaadiku teenindusse, et saaksite kohaldada reegleid ja suunata neid edasi konfigureeritud teenustele.

Enne koormusbalansi loomist laske meil oma domeeni krish512.com ja sekundaarse domeeni * .dev.krish512.com jaoks kasutada AWS ACM-i teenust kasutades HTTPS-sertifikaati. Oma nõuete kohaselt võite lisada kuni 8 sekundaarset domeeni.

Loome nüüd teenuse suursaadikule. Looge fail ambassador-service.yaml kujul

$ touch ambassador-service.yaml

Nüüd kasutage VIM-i või nano-redaktorit, avage fail ja sisestage järgmine yami sisu,

apiVersioon: v1
lahke: teenindus
metaandmed:
  sildid:
  teenistus: suursaadik
    nimi: suursaadik
  märkused:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn: aws: acm: ap-south-1: 123403005789: certificate / 1a2b3c54-b001-12fg-9h33-f98f7f65432d"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: "sg-01a889992221b2cde"
    getambassador.io/config: |
      ---
      apiVersioon: suursaadik / v1
      lahke: moodul
      nimi: tls
      konfiguratsioon:
        server:
          lubatud: tõsi
          redirect_cleartext_from: 80
spec:
  loadBalancerSourceRanges:
  - 0.0.0.0/0
  tüüp: LoadBalancer
  sadamad:
  - nimi: suursaadik-http
    sadam: 80
    targetPort: 80
  - nimi: suursaadik-https
    port: 443
    targetPort: 80
  valija:
    teenistus: suursaadik

Ülaltoodud james täpsustatakse märkuste jaotises meie koormuse tasakaalustaja üksikasjad. Kuna AWS ALB Kubernetes praegu ei toeta, loob see suursaadiku jaoks klassikalise koormuse tasakaalustaja.

  • Väärtus service.beta.kubernetes.io/aws-loadbalancer-ssl-cert väli on meie AWS ACM-i sertifikaadi ARN
  • Väärtus service.beta.kubernetes.io/aws-loadbalancer-ssl-ports teatab meie HTTPS-pordi laadimiste tasakaalustaja jaoks
  • Võtme teenus.beta.kubernetes.io/aws-loadbalancer-extra-security-groups on valikuline ja võimaldab meil lisada täiendavaid turvarühmade reegleid ja lisada need meie koormusbalansseerijale, määrates selle väärtuseks turvarühma ID.

Spetsifikatsioonide osas on loadBalancerSourceRanges jällegi valikuline võti, mida kasutatakse vaikimisi turvarühma kasutades juurdepääsu piiramiseks koormusbalansseerijale. Oleme seda lahti hoidnud, see on vaid tutvustamise eesmärk. Saate selle välja eemaldada või väärtust vastavalt oma vajadustele muuta.

Loome teenuse nüüd.

$ kubectl rakendage -f suursaadiku-service.yaml

See peaks viivitamatult looma teenuse ja algatama koormuse tasakaalustaja loomise AWS EC2 konsoolis.

Iga alamdomeeni DNS-kaardistamise vältimise kohta osutage * .dev.krish512.com sellele koormuse tasakaalustajale AWS Route53 teenuses.

3. samm - juurutage teenused ja marsruut suursaadiku abil

Meie suursaadiku seadistuse ja selle funktsioonide testimiseks võtame Kubernetesil kasutusele 2 teenust ja suuname nende juurde suursaadiku kaudu liikluse annotatsioonide abil.

Kõigepealt loogem oma uute teenuste jaoks arengu nimeruum.

{
  "lahke": "nimeruum",
  "apiVersion": "v1",
  "metaandmed": {
    "nimi": "areng",
    "sildid": {
      "nimi": "areng"
    }
  }
}

Salvestage ülaltoodud json nimega development-namespace.json ja käivitage nimeruumi loomiseks järgmine käsk kubectl

$ kubectl create -f development-namespace.json

Nüüd loogem kasutuselevõtu abil httpd pod ja paljastage see teenust kasutaval suursaadikul.

---
apiVersioon: v1
lahke: teenindus
metaandmed:
  nimi: httpd-teenus
  nimeruum: areng
  märkused:
    getambassador.io/config: |
      ---
      apiVersioon: suursaadik / v1
      lahke: kaardistamine
      nimi: httpd-service_mapping
      host: service1.dev.krish512.com
      eesliide: /
      teenus: httpd-service.development: 80
spec:
  valija:
    rakendus: httpd
    keskkond: areng
    roll: veeb
  sadamad:
  - protokoll: TCP
    sadam: 80
---
apiVersioon: laiendid / v1beta1
liik: juurutamine
metaandmed:
  nimi: httpd
  nimeruum: areng
spec:
  koopiad: 1
  strateegia:
    tüüp: RollingUpdate
  mall:
    metaandmed:
      sildid:
        rakendus: httpd
        keskkond: areng
        roll: veeb
    spec:
      konteinerid:
      - nimi: httpd
        pilt: "httpd"
        sadamad:
        - konteinerPort: 80

Salvestage ülaltoodud yaml nimega httpd.yaml.

Ülaltoodud james oleme loonud märkuse getambassador.io/config, mida kasutatakse suursaadiku konfigureerimiseks. Neid märkusi saab suursaadiku teenuses konfigureerida, kui soovite neid tsentraalselt hallata.

Selles märkuses oleme kaardistanud suursaadiku konfiguratsiooni teenusele ja nimetanud selle nimeks httpd-service_mapping.

Marsruutimise eesmärgil oleme palunud suursaadikul suunata kõik host1 service.dev.krish512.com saabuvad taotlused põhimarsruudile / teenusele httpd-service.development: 80 kus httpd-service on teenuse nimi, arendus on nimeruum ja 80 on sadam, mis on teenuse jaoks avatud.

Looge see Kuberneteses olev httpd-teenus järgmise kubectl-käsu abil,

$ kubectl rakenda -f httpd.yaml

Meie kasutuselevõtuks vajaliku kausta loomiseks ja selle kasutamiseks peaks kuluma minut. Kontrollige, kas pood on saadaval, kasutades järgmist,

$ kubectl hangib kaustad -n arenduse

Oodata väljundit,

NIMI VALMIS STAATUSE TAASTAB VANUS
httpd-56ddd7c88b-ddksp 1/1 Jooksmine 0 28m

Nüüd minge oma brauserisse ja sisestage URL https://service1.dev.krish512.com, peaksite nägema väljundit nagu allpool

Httpd veebiserveri vaikimisi leht

Sarnaselt loogem Nginxi pood kasutuselevõtu abil ja paljastage see suursaadikule, kasutades teenust,

---
apiVersioon: v1
lahke: teenindus
metaandmed:
  nimi: nginx-teenus
  nimeruum: areng
  märkused:
    getambassador.io/config: |
      ---
      apiVersioon: suursaadik / v1
      lahke: kaardistamine
      nimi: nginx-service_mapping
      host: service2.dev.krish512.com
      eesliide: / nginx
      teenus: nginx-service.development: 80
spec:
  valija:
    rakendus: nginx
    keskkond: areng
    roll: veeb
  sadamad:
  - protokoll: TCP
    sadam: 80
---
apiVersioon: laiendid / v1beta1
liik: juurutamine
metaandmed:
  nimi: nginx
  nimeruum: areng
spec:
  koopiad: 1
  strateegia:
    tüüp: RollingUpdate
  mall:
    metaandmed:
      sildid:
        rakendus: nginx
        keskkond: areng
        roll: veeb
    spec:
      konteinerid:
      - nimi: nginx
        pilt: "nginx"
        sadamad:
        - konteinerPort: 80

Salvestage ülaltoodud yaml nimega nginx.yaml ja käivitage,

$ kubectl rakendab -f nginx.yaml

See peaks jällegi minuti looma, et pigi luua. Veenduge, et kausta loomine õnnestus, kasutades järgmist,

$ kubectl hangib kaustad -n arenduse

Oodata väljundit,

NIMI VALMIS STAATUSE TAASTAB VANUS
httpd-56ddd7c88b-ddksp 1/1 Jooksmine 0 10m
nginx-6455785f94-z992f 1/1 Jooksmine 0 1m

Selles jamlis oleme osutanud domeenile service2.dev.krish512.com marsruudi / nginx kuni Nginxi teenuse juurde.

Proovige oma brauseris URL-i https://service2.dev.krish512.com/nginx ja oodake järgmist ekraani,

Nginxi veebiserveri vaikimisi leht

Proovige lisada veel kaminaid ja paljastage need, kasutades teenust koos suursaadiku märkustega, et neid saaks marsruudida ja hallata. Lisateavet konfiguratsioonivõimaluste kohta leiate suursaadiku dokumentatsioonist.

Täiendavad sammud

Suursaadikul on diagnostiline kasutajaliides, mida saab kasutada silumiseks ja diagnostikaks. Iga suursaadiku pood paljastab selle kasutajaliidese sadamas 8877. Saame luua teenuse, mis paljastaks selle liidese, mis töötab pordi sadamas 8877, ja saame selle kaardistada domeeniga ambassador.dev.krish512.com

Loome teenuse, mis paljastaks diagnostilise kasutajaliidese järgmiselt:

---
apiVersioon: v1
lahke: teenindus
metaandmed:
  nimi: suursaadik-diagnostiline
  märkused:
    getambassador.io/config: |
      ---
      apiVersioon: suursaadik / v1
      lahke: kaardistamine
      nimi: ambassador-diagnostic_mapping
      host: ambassador.dev.krish512.com
      ajalõpp_ms: 30000
      eesliide: /
      teenus: suursaadik-diagnostik: 8877
spec:
  valija:
    teenistus: suursaadik
  sadamad:
  - protokoll: TCP
    port: 8877

Nüüd külastage lihtsalt lehte https://ambassador.dev.krish512.com/ ja peaksite saama näha midagi sellist UI:

Järeldus

Lõime Kuberneteses majutatavate teenuste jaoks API-lüüsi. Selle abil suudame suunata liikluse konkreetsele teenusele, tuginedes päringupäistele, nagu hostinimi, URI jne. Kasutame seda tulevikus oma Ambassador API Gateway kaudu veel mitme teenuse pakkumiseks.

Liituge meie kogukonnaga Slack ja lugege meie iganädalasi Fauni teemasid ⬇

Kui sellest postitusest oli abi, klõpsake mõne korra all alloleval plaksutusnupul, et näidata oma tuge autorile! ⬇