使用 Cloud Service Mesh 启用 Ingress

本主题介绍如何安装预安装了入站网关的 Cloud Service Mesh。如果您需要 Ingress 控制器,则可以借助 Cloud Service Mesh 为您的 Deployment 配置 Kubernetes Ingress 资源。本主题提供的示例展示了如何配置示例 Deployment 和 Ingress 资源。

Cloud Service Mesh 的安装包括两个主要部分:

  1. 安装特定版本的 Cloud Service Mesh 客户管理的控制平面和入站网关。
  2. 使用修订版本标签为命名空间添加标签,并重新部署工作负载以注入 Sidecar 代理

如果您只需要使用 Ingress 控制器的 Ingress 对象,则无需将边车代理注入工作负载 Pod。但如果您需要 Cloud Service Mesh 提供的安全优势,并且想要使用流量路由功能,则需要注入 Sidecar 代理。

准备工作

在开始使用 GKE on AWS 之前,请确保您已执行以下任务:

  • 安装管理服务
  • 创建用户集群
  • 按照使用 Cloud Console 连接到集群中的步骤向 Connect 注册集群。
  • 配置集群,将 Workload Identity 与 Google Cloud 搭配使用
  • 如果您的用户集群限制对互联网的出站访问权限,请允许访问以下容器代码库网域:

    • docker.io
    • quay.io
  • anthos-aws 目录中,使用 anthos-gke 将上下文切换到用户集群。

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME 替换为用户集群名称。

安装 Anthos Service Mesh

按照安装 Cloud Service Mesh 中的步骤操作。

创建示例 Deployment

在本部分中,您将安装示例应用并为其创建 Ingress 端点。

  1. 创建 hello-app 的 Deployment 并为该部署创建 ClusterIP。将以下 YAML 复制到名为 hello-app.yaml 的文件中。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      selector:
        matchLabels:
          app: hello-app
      replicas: 3
      template:
        metadata:
          labels:
            app: hello-app
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      type: ClusterIP
      selector:
        app: hello-app
      ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
    
  2. 使用 kubectl apply 将 YAML 应用于您的集群。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app.yaml
    
  3. 为示例应用创建 Kubernetes Ingress。将以下 YAML 复制到名为 hello-app-ingress.yaml 的文件中。

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: istio
      labels:
        app: hello-app
      name: hello-app
    spec:
      rules:
      - host:
        http:
          paths:
          - backend:
              serviceName: hello-app
              servicePort: 8080
    
  4. 通过使用 kubectl apply 应用配置来创建 Ingress。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app-ingress.yaml
    
  5. 使用 kubectl get svc 检查网关的状态。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get ingress hello-app
    

    ADDRESS 字段应具有 ELB 域名。如果 ADDRESS 仍然为 pending,请确认您的 VPC 和子网标签。

  6. 您可以通过编写主机和端口来检查入站网关网址。要获取网关网址,请执行以下命令:

    export INGRESS_URL=$(env HTTPS_PROXY=http://localhost:8118 \
    kubectl get ingress hello-app -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    echo "Your hello-app Ingress URL is: http://"$INGRESS_URL
    

    最后一个命令会输出 Ingress 的端点。

  7. 如果您创建了公共 Ingress,则可以通过访问 http://$INGRESS_URL/ 来查看 curl 中的 hello-app 默认网页。

    curl $INGRESS_URL/
    

清理

您可以使用 kubectl delete 移除 hello-app 组件。

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f hello-app.yaml &&\
  kubectl delete -f hello-app-ingress.yaml

如果您要移除 Cloud Service Mesh,请参阅卸载 Cloud Service Mesh

后续步骤

详细了解以下内容: