使用 AWS NLB 配置 Istio Ingress

Ingress AWS 网络负载均衡器

本文提供了使用 AWS 网络负载均衡器配置 ingress Istio 的说明。

可以使用网络负载均衡器 (NLB) 来代替传统的负载均衡器。你可以查看不同的 AWS 负载均衡器 之间的比较以获取更多的解释。

先行条件

以下说明需要 Kubernetes 1.9.0 或更高版本 的集群。

AWS nlb 在 Kubernetes 上的使用是一项 Alpha 功能 ,不建议用于生产环境的集群。

IAM Policy

你需要在主角色上应用策略,以便能够配置网络负载均衡器。

  1. 在 AWS iam 控制台中,点击策略并单击“创建新策略”:

    创建一个新的策略
    创建一个新的策略
  2. 选择 json:

    选择 json
    选择 json
  3. 拷贝以下内容:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "kopsK8sNLBMasterPermsRestrictive",
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeVpcs",
                    "elasticloadbalancing:AddTags",
                    "elasticloadbalancing:CreateListener",
                    "elasticloadbalancing:CreateTargetGroup",
                    "elasticloadbalancing:DeleteListener",
                    "elasticloadbalancing:DeleteTargetGroup",
                    "elasticloadbalancing:DescribeListeners",
                    "elasticloadbalancing:DescribeLoadBalancerPolicies",
                    "elasticloadbalancing:DescribeTargetGroups",
                    "elasticloadbalancing:DescribeTargetHealth",
                    "elasticloadbalancing:ModifyListener",
                    "elasticloadbalancing:ModifyTargetGroup",
                    "elasticloadbalancing:RegisterTargets",
                    "elasticloadbalancing:SetLoadBalancerPoliciesOfListener"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeVpcs",
                    "ec2:DescribeRegions"
                ],
                "Resource": "*"
            }
        ]
    }
    
  4. 点击审核策略,填写所有字段,接着点击创建策略:

    验证策略
    验证策略
  5. 点击角色,选择你的主角色节点,然后点击附加策略:

    附加策略
    附加策略
  6. 现在,你的策略就已经附加到了主节点。

重写 Istio Ingress 服务

你需要使用以下内容来重写 istio-ingress 服务:

apiVersion: v1
kind: Service
metadata:
  name: istio-ingress
  namespace: istio-system
  labels:
    istio: ingress
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
  - port: 443
    protocol: TCP
    targetPort: 443
    name: https
    selector:
    istio: ingress
    type: LoadBalancer
这些信息有用吗?
Do you have any suggestions for improvement?

Thanks for your feedback!