本文介绍在创建的Ingress中通过Annotation指定了SLB ID场景下,如何使用该SLB提供Ingress的转发功能。

前提条件

  • 您已创建一个ASK集群,集群的VPC需要配置NAT网关,从而可以访问外网,下载容器镜像。具体操作,请参见创建ASK集群
  • 您已通过kubectl连接到集群。具体操作,请参见通过kubectl连接Kubernetes集群
  • 您已经创建一个和ASK集群在同一个VPC的性能保障型规格(支持ENI)SLB实例 。
    • 如果您在ASK集群同VPC下已经有一个SLB实例,您可以直接登录负载均衡管理控制台实例管理页面获取SLB ID。
    • 如果您没有SLB ID,您需要在集群同VPC下创建一个性能保障型SLB实例(例如:slb.s2.small),该实例类型可以是私网或公网。具体操作,请参见创建和管理CLB实例
    • 本文操作示例中申请的是公网SLB实例。

操作步骤

说明 Ingress Controller会自动初始化SLB实例的80和443端口,请确保当前没有其他服务使用。

步骤一:部署服务

  1. 创建并拷贝以下内容到tomcat-service.yml文件中,并执行kubectl apply -f tomcat-service.yml命令,部署一个tomcat测试应用。
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: tomcat
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: tomcat
      template:
        metadata:
          labels:
            run: tomcat
        spec:
          containers:
          - image: tomcat:7.0
            imagePullPolicy: Always
            name: tomcat
            ports:
            - containerPort: 8080
              protocol: TCP
          restartPolicy: Always
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        run: tomcat
      clusterIP: None

    预期输出:

    deployment "tomcat" created
    service "tomcat" created
  2. 执行以下命令查看应用状态。
    kubectl get svc,deploy tomcat

    预期输出:

    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    svc/tomcat   ClusterIP   <none>       <none>        8080/TCP   1m
    
    NAME            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    deploy/tomcat   1         1         1            1           1m

步骤二:配置Ingress

  1. 创建并拷贝如下内容到tomcat-ingress.yml文件中,并执行kubectl apply -f tomcat-ingress.yml命令,配置Ingress。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tomcat-ingress
      annotations:
        # 配置使用指定的SLB实例(SLB ID)。
        service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxx            ##替换为您的SLB ID。
        service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true"
        #指定证书ID。
        service.beta.kubernetes.io/alicloud-loadbalancer-cert-id: "624f2e60-62b6-11ea-95a3-2af160c0****"   
    spec:
      ingressClassName: slb
      rules:
      # 配置七层域名。
      - host: bar.foo.com
        http:
          paths:
          # 配置Context Path。
          - path: /
            backend:
              service:
                name: tomcat
                port:
                  number: 8080
            pathType: ImplementationSpecific

    预期输出:

    ingress "tomcat-ingress" created
  2. 执行以下命令获取SLB实例IP。
    kubectl get ing tomcat-ingress

    预期输出:

    NAME             HOSTS         ADDRESS        PORTS     AGE
    tomcat-ingress   bar.foo.com   47.168.XX.XX   80, 443   1m

步骤三:访问服务

说明 目前需要您自行将域名解析到SLB实例IP上。
本例在域名中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。
47.168.XX.XX    bar.foo.com
  • 通过浏览器访问tomcat服务。S10
  • 通过命令行方式访问tomcat服务。
    curl -k -H "Host: bar.foo.com" https://47.168.XX.XX