Chuẩn bị đơn đăng ký cho Istio

Chuẩn bị đơn đăng ký cho Istio

Istio là một công cụ thuận tiện để kết nối, bảo mật và giám sát các ứng dụng phân tán. Istio sử dụng nhiều công nghệ khác nhau để chạy và quản lý phần mềm trên quy mô lớn, bao gồm các bộ chứa để đóng gói mã ứng dụng và các phần phụ thuộc để triển khai cũng như Kubernetes để quản lý các bộ chứa đó. Do đó, để làm việc với Istio, bạn phải biết cách hoạt động của một ứng dụng có nhiều dịch vụ dựa trên các công nghệ này mà không Istio. Nếu những công cụ và khái niệm này đã quen thuộc với bạn, vui lòng bỏ qua hướng dẫn này và đi thẳng đến phần Cài đặt Istio trên Google Kubernetes Engine (GKE) hoặc cài đặt tiện ích mở rộng Istio trên GKE.

Đây là hướng dẫn từng bước trong đó chúng tôi sẽ hướng dẫn toàn bộ quy trình từ mã nguồn đến vùng chứa GKE để giúp bạn hiểu cơ bản về các công nghệ này thông qua một ví dụ. Bạn cũng sẽ thấy Istio tận dụng sức mạnh của những công nghệ này như thế nào. Điều này giả định rằng bạn không biết gì về vùng chứa, Kubernetes, lưới dịch vụ hoặc Istio.

nhiệm vụ

Trong hướng dẫn này, bạn sẽ hoàn thành các nhiệm vụ sau:

  1. Học một ứng dụng hello world đơn giản với nhiều dịch vụ.
  2. Chạy ứng dụng từ mã nguồn.
  3. Đóng gói ứng dụng trong các thùng chứa.
  4. Tạo cụm Kubernetes.
  5. Triển khai các container vào một cụm.

Trước khi bạn bắt đầu

Làm theo hướng dẫn để kích hoạt API Kubernetes Engine:

  1. Đi đến Trang Kubernetes Engine trong bảng điều khiển Google Cloud Platform.
  2. Tạo hoặc chọn một dự án.
  3. Đợi cho đến khi API và các dịch vụ liên quan được bật. Có thể sẽ mất vài phút.
  4. Đảm bảo thanh toán được thiết lập cho dự án Google Cloud Platform của bạn. Tìm hiểu cách bật tính năng thanh toán.

Trong hướng dẫn này, bạn có thể sử dụng Cloud Shell để chuẩn bị cho máy ảo g1-small trong Google Computing Engine với Linux dựa trên Debian hoặc máy tính Linux hoặc macOS.

Tùy chọn A: Sử dụng Cloud Shell

Lợi ích của việc sử dụng Cloud Shell:

  • Môi trường phát triển Python 2 và Python 3 (bao gồm virtualenv) được cấu hình đầy đủ.
  • Công cụ dòng lệnh gcloud, docker, git и kubectl, mà chúng tôi sẽ sử dụng đã được cài đặt.
  • Bạn có một số để lựa chọn soạn thảo văn bản:
    1. Trình soạn thảo mã, mở ra bằng biểu tượng chỉnh sửa ở đầu cửa sổ Cloud Shell.
    2. Emacs, Vim hoặc Nano, mở từ dòng lệnh trong Cloud Shell.

Để sử dụng Vỏ đám mây:

  1. Chuyển đến bảng điều khiển GCP.
  2. Ấn nút Kích hoạt Cloud Shell (Kích hoạt Cloud Shell) ở đầu cửa sổ bảng điều khiển GCP.

Chuẩn bị đơn đăng ký cho Istio

Ở phần dưới Bảng điều khiển GCP Phiên Cloud Shell có dòng lệnh sẽ mở trong một cửa sổ mới.

Chuẩn bị đơn đăng ký cho Istio

Tùy chọn B: Sử dụng công cụ dòng lệnh cục bộ

Nếu bạn định làm việc trên máy tính chạy Linux hoặc macOS, bạn sẽ cần định cấu hình và cài đặt các thành phần sau:

  1. Tùy chỉnh Môi trường phát triển Python 3 và Python 2.

  2. Cài đặt SDK đám mây bằng công cụ dòng lệnh gcloud.

  3. Tải về kubectl - công cụ dòng lệnh để làm việc với Kubernetes.

    gcloud components install kubectl

  4. Tải về Phiên bản cộng đồng Docker (CE). Bạn sẽ sử dụng công cụ dòng lệnh dockerđể tạo hình ảnh vùng chứa cho ứng dụng mẫu.

  5. Cài đặt công cụ Kiểm soát phiên bản Gitđể lấy ứng dụng mẫu từ GitHub.

Tải xuống mã mẫu

  1. Tải xuống mã nguồn máy chủ xin chào:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. Chuyển đến thư mục mã ví dụ:

    cd istio-samples/sample-apps/helloserver

Khám phá một ứng dụng với nhiều dịch vụ

Ứng dụng mẫu được viết bằng Python và bao gồm hai thành phần tương tác bằng cách sử dụng REST của:

  • máy chủ: máy chủ đơn giản với một điểm cuối LẤY, /, in "hello world" ra bảng điều khiển.
  • chất tải: tập lệnh gửi lưu lượng truy cập tới máy chủ, với số lượng yêu cầu có thể định cấu hình mỗi giây.

Chuẩn bị đơn đăng ký cho Istio

Chạy một ứng dụng từ mã nguồn

Để khám phá ứng dụng mẫu, hãy chạy ứng dụng đó trong Cloud Shell hoặc trên máy tính của bạn.
1) Trong danh mục istio-mẫu/ứng dụng mẫu/helloserver chạy máy chủ:

python3 server/server.py

Khi chạy máy chủ sau đây được hiển thị:

INFO:root:Starting server...

2) Mở một cửa sổ terminal khác để gửi yêu cầu tới máy chủ. Nếu bạn đang sử dụng Cloud Shell, hãy nhấp vào biểu tượng thêm để mở một phiên khác.
3) Gửi yêu cầu tới máy chủ:

curl http://localhost:8080

máy chủ trả lời:

Hello World!

4) Từ thư mục mà bạn đã tải xuống mã mẫu, hãy chuyển đến thư mục chứa chất tải:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen

5) Tạo các biến môi trường sau:

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) Chạy virtualenv:

virtualenv --python python3 env

7) Kích hoạt môi trường ảo:

source env/bin/activate

8) Đặt yêu cầu cho chất tải:

pip3 install -r requirements.txt

9) Chạy chất tải:

python3 loadgen.py

Khi chạy chất tải hiển thị một cái gì đó giống như thông báo sau:

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

Trong một cửa sổ terminal khác máy chủ xuất các thông báo sau tới bảng điều khiển:

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

Từ góc độ mạng, toàn bộ ứng dụng chạy trên một máy chủ duy nhất (máy tính cục bộ hoặc máy ảo Cloud Shell). Vì vậy bạn có thể sử dụng localhostđể gửi yêu cầu đến máy chủ.
10) Dừng lại chất tải и máy chủ, đi vào Ctrl-c trong mọi cửa sổ terminal.
11) Trong cửa sổ terminal chất tải tắt môi trường ảo:

deactivate

Đóng gói ứng dụng trong container

Để chạy ứng dụng trên GKE, bạn cần đóng gói ứng dụng mẫu - máy chủ и chất tải - tại container. Vùng chứa là một cách để đóng gói một ứng dụng để cách ly nó khỏi môi trường của nó.

Để đóng gói một ứng dụng vào một thùng chứa, bạn cần Dockerfile. Dockerfile là một tệp văn bản xác định các lệnh để xây dựng mã nguồn của ứng dụng và các phần phụ thuộc của nó vào Hình ảnh Docker. Sau khi được xây dựng, bạn tải hình ảnh lên sổ đăng ký vùng chứa như Docker Hub hoặc Đăng ký vùng chứa.

Ví dụ đã có rồi Dockerfile cho máy chủ и chất tải với tất cả các lệnh cần thiết để thu thập hình ảnh. Dưới - Dockerfile cho máy chủ:

FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        g++ 
    && rm -rf /var/lib/apt/lists/*

# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1

RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        wget

WORKDIR /helloserver

# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/

# Add the application
COPY . .

EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]

  • Đội TỪ trăn: 3-slim làm cơ sở yêu cầu Docker sử dụng phiên bản mới nhất Hình ảnh Python 3 làm cơ sở.
  • Đội SAO CHÉP. . sao chép các tập tin nguồn vào thư mục làm việc hiện tại (trong trường hợp của chúng tôi chỉ máy chủ.py) vào hệ thống tệp của vùng chứa.
  • ĐIỂM VÀO xác định lệnh được sử dụng để khởi động vùng chứa. Trong trường hợp của chúng tôi, lệnh này gần giống với lệnh bạn đã từng chạy máy chủ.py từ mã nguồn.
  • Đội PHƠI RA chỉ ra rằng máy chủ chờ dữ liệu qua cổng 8080. Đội ngũ này không phải cung cấp cổng. Đây là một số loại tài liệu cần thiết để mở cổng 8080 khi khởi động container.

Chuẩn bị chứa ứng dụng của bạn

1) Đặt các biến môi trường sau. Thay thế DỰ ÁN_ID vào ID dự án GCP của bạn.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Sử dụng giá trị DỰ ÁN_ID и GCR_REPO bạn gắn thẻ hình ảnh Docker khi xây dựng nó và đẩy nó vào Cơ quan đăng ký vùng chứa riêng tư.

2) Đặt dự án GCP mặc định cho công cụ dòng lệnh gcloud.

gcloud config set project $PROJECT_ID

3) Đặt vùng mặc định cho công cụ dòng lệnh gcloud.

gcloud config set compute/zone us-central1-b

4) Đảm bảo rằng dịch vụ Đăng ký vùng chứa được bật trong dự án GCP.

gcloud services enable containerregistry.googleapis.com

Máy chủ container hóa

  1. Chuyển đến thư mục chứa ví dụ máy chủ:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. Lắp ráp hình ảnh bằng cách sử dụng Dockerfile và các biến môi trường bạn đã xác định trước đó:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

Thông số -t đại diện cho thẻ Docker. Đây là tên của image bạn sử dụng khi triển khai vùng chứa.

  1. Tải hình ảnh lên Cơ quan đăng ký vùng chứa:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Container hóa xe tải

1) Chuyển đến thư mục chứa ví dụ chất tải:

cd ../loadgen

2) Thu thập hình ảnh:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) Tải hình ảnh lên Cơ quan đăng ký vùng chứa:

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

Xem danh sách hình ảnh

Xem lại danh sách hình ảnh trong kho lưu trữ và xác minh rằng hình ảnh đã được tải lên:

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

Lệnh hiển thị tên của các hình ảnh mới được tải lên:

NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

Tạo cụm GKE.

Các thùng chứa này có thể chạy trên máy ảo Cloud Shell hoặc trên máy tính có lệnh bến tàu chạy. Nhưng trong môi trường sản xuất, bạn cần một cách để sắp xếp các vùng chứa một cách tập trung. Ví dụ: bạn cần một hệ thống đảm bảo các vùng chứa luôn chạy và bạn cần một cách để mở rộng quy mô và tăng thêm các phiên bản vùng chứa nếu lưu lượng truy cập tăng.

Để chạy các ứng dụng được chứa, bạn có thể sử dụng G.K.E.. GKE là một nền tảng điều phối vùng chứa tổng hợp các máy ảo thành một cụm. Mỗi máy ảo được gọi là một nút. Các cụm GKE dựa trên hệ thống quản lý cụm Kubernetes nguồn mở. Kubernetes cung cấp các cơ chế tương tác với cụm.

Tạo cụm GKE:

1) Tạo một cụm:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

Đội gcloud tạo một cụm istioready trong dự án GCP và vùng mặc định mà bạn đã chỉ định. Để chạy Istio, chúng tôi khuyên bạn nên có ít nhất 4 nút và máy ảo n1-tiêu chuẩn-2.

Nhóm tạo ra cụm trong vài phút. Khi cụm đã sẵn sàng, lệnh sẽ xuất ra kết quả như thế này tin nhắn.

2) Cung cấp thông tin xác thực trong công cụ dòng lệnh kubectlđể sử dụng nó để quản lý cụm:

gcloud container clusters get-credentials istioready

3) Bây giờ bạn có thể giao tiếp với Kubernetes qua kubectl. Ví dụ: lệnh sau có thể tìm hiểu trạng thái của các nút:

kubectl get nodes

Lệnh tạo ra một danh sách các nút:

NAME                                       STATUS   ROLES    AGE    VERSION
gke-istoready-default-pool-dbeb23dc-1vg0   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5   Ready    <none>   100s   v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw   Ready    <none>   99s    v1.13.6-gke.13

Các khái niệm chính của Kubernetes

Sơ đồ thể hiện một ứng dụng trên GKE:

Chuẩn bị đơn đăng ký cho Istio

Trước khi triển khai vùng chứa trong GKE, hãy tìm hiểu các khái niệm chính của Kubernetes. Có các liên kết ở cuối nếu bạn muốn tìm hiểu thêm.

  • Nút và cụm. Trong GKE, nút là một máy ảo. Trên các nền tảng Kubernetes khác, nút có thể là máy tính hoặc máy ảo. Cụm là một tập hợp các nút có thể được coi là một đơn vị duy nhất nơi bạn triển khai một ứng dụng được đóng gói.
  • Vỏ. Trong Kubernetes, các container chạy theo nhóm. Pod trong Kubernetes là một đơn vị không thể chia cắt. Một Pod chứa một hoặc nhiều container. Bạn triển khai các thùng chứa máy chủ và chất tải trong các nhóm riêng biệt. Khi có nhiều vùng chứa trong một nhóm (ví dụ: máy chủ ứng dụng và máy chủ proxy), các vùng chứa được quản lý dưới dạng một thực thể duy nhất và chia sẻ tài nguyên nhóm.
  • Triển khai. Trong Kubernetes, triển khai là một đối tượng là tập hợp các nhóm giống hệt nhau. Triển khai khởi chạy nhiều bản sao của nhóm được phân phối trên các nút cụm. Triển khai tự động thay thế các nhóm bị lỗi hoặc không phản hồi.
  • Dịch vụ Kubernetes. Khi chạy mã ứng dụng trong GKE, kết nối giữa chất tải и máy chủ. Khi bạn khởi động các dịch vụ trên máy ảo hoặc máy tính để bàn Cloud Shell, bạn đã gửi yêu cầu tới máy chủ tại localhost: 8080. Sau khi được triển khai lên GKE, các nhóm sẽ được thực thi trên các nút có sẵn. Theo mặc định, bạn không có quyền kiểm soát nút nào mà nhóm đang chạy, vì vậy bạn vỏ quả không có địa chỉ IP cố định.
    Để có được địa chỉ IP cho máy chủ, bạn cần xác định mức độ trừu tượng hóa mạng trên đầu các nhóm. Đó là những gì nó là Dịch vụ Kubernetes. Dịch vụ Kubernetes cung cấp điểm cuối liên tục cho một tập hợp các nhóm. Có một vài các loại dịch vụ. máy chủ sử dụng Cân bằng tải, cung cấp địa chỉ IP bên ngoài để liên hệ máy chủ từ bên ngoài cụm.
    Kubernetes cũng có hệ thống DNS tích hợp để gán tên DNS (ví dụ: helloserver.default.cluster.local) dịch vụ. Nhờ đó, các nhóm trong cụm giao tiếp với các nhóm khác trong cụm tại một địa chỉ cố định. Không thể sử dụng tên DNS bên ngoài cụm, chẳng hạn như trong Cloud Shell hoặc trên máy tính.

Kubernetes biểu hiện

Khi bạn chạy ứng dụng từ nguồn, bạn đã sử dụng lệnh mệnh lệnh python3

máy chủ.py

Mệnh lệnh ngụ ý một động từ: "làm điều này."

Sử dụng Kubernetes mô hình khai báo. Điều này có nghĩa là chúng tôi không nói cho Kubernetes chính xác phải làm gì mà chỉ mô tả trạng thái mong muốn. Ví dụ: Kubernetes khởi động và dừng các nhóm khi cần để đảm bảo rằng trạng thái thực tế của hệ thống khớp với trạng thái mong muốn.

Bạn chỉ ra trạng thái mong muốn trong bảng kê khai hoặc tệp YAML. Tệp YAML chứa thông số kỹ thuật cho một hoặc nhiều đối tượng Kubernetes.

Ví dụ này chứa tệp YAML cho máy chủ и chất tải. Mỗi tệp YAML chỉ định trạng thái mong muốn của đối tượng triển khai và dịch vụ Kubernetes.

máy chủ.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  selector:
    matchLabels:
      app: helloserver
  replicas: 1
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always

  • loại cho biết loại đối tượng.
  • siêu dữ liệu.name chỉ định tên triển khai.
  • Trường đầu tiên suy nghi chứa mô tả về trạng thái mong muốn.
  • thông số kỹ thuật.bản sao cho biết số lượng nhóm mong muốn.
  • Mục thông số kỹ thuật.template xác định một mẫu nhóm. Có một trường trong đặc tả nhóm hình ảnh, trong đó chỉ định tên của hình ảnh cần trích xuất từ ​​Sổ đăng ký vùng chứa.

Dịch vụ này được định nghĩa như sau:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • Cân bằng tải: Khách hàng gửi yêu cầu đến địa chỉ IP của bộ cân bằng tải, địa chỉ này có địa chỉ IP cố định và có thể truy cập được từ bên ngoài cụm.
  • cổng đích: như bạn còn nhớ, đội MỞ RỘNG 8080 в Dockerfile không cung cấp cổng. Bạn cung cấp cổng 8080để bạn có thể liên hệ với container máy chủ bên ngoài cụm. Trong trường hợp của chúng ta hellosvc.default.cluster.local:80 (tên ngắn: hellosvc) tương ứng với cổng 8080 Địa chỉ IP nhóm máy chủ xin chào.
  • cổng: Đây là số cổng nơi các dịch vụ khác trong cụm sẽ gửi yêu cầu.

tảigen.yaml

Đối tượng triển khai tới tảigen.yaml trông giống như máy chủ.yaml. Sự khác biệt là đối tượng triển khai có chứa một phần env. Nó xác định các biến môi trường cần thiết chất tải và bạn đã cài đặt khi chạy ứng dụng từ nguồn.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loadgenerator
spec:
  selector:
    matchLabels:
      app: loadgenerator
  replicas: 1
  template:
    metadata:
      labels:
        app: loadgenerator
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/loadgen:v0.0.1
        imagePullPolicy: Always
        env:
        - name: SERVER_ADDR
          value: "http://hellosvc:80/"
        - name: REQUESTS_PER_SECOND
          value: "10"
        resources:
          requests:
            cpu: 300m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

thời gian chất tải không chấp nhận các yêu cầu đến, đối với trường kiểu chỉ định Cụm IP. Loại này cung cấp một địa chỉ IP liên tục mà các dịch vụ trong cụm có thể sử dụng, nhưng địa chỉ IP này không được hiển thị cho các máy khách bên ngoài.

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

Triển khai các container trong GKE

1) Chuyển đến thư mục chứa ví dụ máy chủ:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) Mở máy chủ.yaml trong một trình soạn thảo văn bản.
3) Thay thế tên trong trường hình ảnh vào tên của hình ảnh Docker của bạn.

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

Thay thế DỰ ÁN_ID vào ID dự án GCP của bạn.
4) Lưu và đóng máy chủ.yaml.
5) Triển khai tệp YAML cho Kubernetes:

kubectl apply -f server.yaml

Sau khi hoàn thành thành công, lệnh sẽ tạo ra đoạn mã sau:

deployment.apps/helloserver created
service/hellosvc created

6) Đi tới thư mục chứa chất tải:

cd ../loadgen

7) Mở tảigen.yaml trong một trình soạn thảo văn bản.
8) Thay thế tên trong trường hình ảnh vào tên của hình ảnh Docker của bạn.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

Thay thế DỰ ÁN_ID vào ID dự án GCP của bạn.
9) Lưu và đóng tảigen.yaml, đóng trình soạn thảo văn bản.
10) Triển khai tệp YAML cho Kubernetes:

kubectl apply -f loadgen.yaml

Sau khi hoàn thành thành công, lệnh sẽ tạo ra đoạn mã sau:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Kiểm tra trạng thái của nhóm:

kubectl get pods

Lệnh hiển thị trạng thái:

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) Trích xuất nhật ký ứng dụng từ nhóm chất tải. Thay thế POD_ID đến mã định danh từ câu trả lời trước đó.

kubectl logs loadgenerator-POD_ID

13) Lấy địa chỉ IP bên ngoài hellosvc:

kubectl get service

Phản hồi lệnh trông giống như thế này:

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
hellosvc     LoadBalancer   10.81.15.158   192.0.2.1       80:31127/TCP   33m
kubernetes   ClusterIP      10.81.0.1      <none>          443/TCP        93m
loadgensvc   ClusterIP      10.81.15.155   <none>          80/TCP         4m52s

14) Gửi yêu cầu tới hellosvc: thay thế EXTERNAL_IP đến địa chỉ IP bên ngoài hellosvc.

curl http://EXTERNAL_IP

Hãy đối đầu với Istio

Bạn đã triển khai một ứng dụng cho GKE. chất tải có thể sử dụng DNS Kubernetes (hellosvc:80) để gửi yêu cầu tới máy chủvà bạn có thể gửi yêu cầu tới máy chủ bằng địa chỉ IP bên ngoài. Mặc dù Kubernetes có nhiều tính năng nhưng vẫn thiếu một số thông tin về dịch vụ:

  • Các dịch vụ tương tác như thế nào? Mối quan hệ giữa các dịch vụ là gì? Lưu lượng truy cập giữa các dịch vụ như thế nào? Bạn có biết rằng chất tải gửi yêu cầu đến máy chủ, nhưng hãy tưởng tượng rằng bạn không biết gì về ứng dụng. Để trả lời những câu hỏi này, chúng ta hãy xem danh sách các nhóm đang chạy trong GKE.
  • Số liệu. Bao lâu máy chủ đáp ứng một yêu cầu đến? Máy chủ nhận được bao nhiêu yêu cầu mỗi giây? Nó có đưa ra thông báo lỗi không?
  • Thông tin an ninh. Giao thông giữa chất tải и máy chủ vừa đi qua HTTP hoặc bằng cách mTLS?

Istio trả lời tất cả những câu hỏi này. Để làm điều này, Istio đặt một proxy sidecar Đặc phái viên trong mỗi nhóm. Proxy Envoy chặn tất cả lưu lượng truy cập đến và đi đến vùng chứa ứng dụng. Nó có nghĩa là máy chủ и chất tải nhận thông qua Envoy proxy sidecar và tất cả lưu lượng truy cập từ chất tải к máy chủ đi qua proxy Envoy.

Kết nối giữa các proxy Envoy tạo thành một mạng lưới dịch vụ. Kiến trúc lưới dịch vụ cung cấp một lớp điều khiển trên Kubernetes.

Chuẩn bị đơn đăng ký cho Istio

Vì proxy Envoy chạy trong vùng chứa riêng của chúng nên Istio có thể được cài đặt trên cụm GKE mà hầu như không có thay đổi nào đối với mã ứng dụng. Nhưng bạn đã thực hiện một số công việc để ứng dụng của mình sẵn sàng được quản lý bởi Istio:

  • Dịch vụ cho tất cả các container. Để triển khai máy chủ и chất tải gắn liền với dịch vụ Kubernetes. Thậm chí chất tải, không nhận được yêu cầu đến thì có một dịch vụ.
  • Các cổng trong dịch vụ phải có tên. Mặc dù các cổng dịch vụ có thể không được đặt tên trong GKE nhưng Istio yêu cầu bạn chỉ định tên cổng theo giao thức của ông ấy. Trong tệp YAML, cổng dành cho máy chủ được gọi là httpvì máy chủ sử dụng giao thức HTTP... Nếu như dịch vụ đã sử dụng gRPC, bạn sẽ đặt tên cho cổng grpc.
  • Triển khai được gắn cờ. Vì vậy, bạn có thể sử dụng các tính năng quản lý lưu lượng của Istio, chẳng hạn như phân chia lưu lượng giữa các phiên bản của cùng một dịch vụ.

Cài đặt Istio

Có hai cách để cài đặt Istio. Có thể bật Istio trên tiện ích mở rộng GKE hoặc cài đặt phiên bản mã nguồn mở của Istio trên cụm. Với Istio trên GKE, bạn có thể dễ dàng quản lý việc cài đặt và nâng cấp Istio trong suốt vòng đời của cụm GKE. Nếu bạn muốn phiên bản mới nhất của Istio hoặc có nhiều quyền kiểm soát hơn đối với cấu hình bảng điều khiển Istio của mình, hãy cài đặt phiên bản nguồn mở thay vì tiện ích mở rộng Istio trên GKE. Để quyết định cách tiếp cận, hãy đọc bài viết Tôi có cần Istio trên GKE không?.

Chọn một tùy chọn, xem lại hướng dẫn thích hợp và làm theo hướng dẫn để cài đặt Istio trên cụm của bạn. Nếu bạn muốn sử dụng Istio với ứng dụng mới được triển khai của mình, cho phép triển khai sidecar cho không gian tên mặc định.

Vệ sinh

Để tránh bị tính phí vào tài khoản Google Cloud Platform đối với các tài nguyên bạn đã sử dụng trong hướng dẫn này, hãy xóa cụm vùng chứa sau khi bạn đã cài đặt Istio và chơi với ứng dụng mẫu. Thao tác này sẽ xóa tất cả tài nguyên cụm, chẳng hạn như phiên bản điện toán, ổ đĩa và tài nguyên mạng.

Cái gì tiếp theo?

Nguồn: www.habr.com

Thêm một lời nhận xét