AWS 上的 Kubernetes Ingress 控制器和负载均衡器

AWS 上的 Kubernetes Ingress 控制器和负载均衡器

我想在 AWS 上创建一个单节点 K8S 集群并运行一个简单的演示应用程序,通过端口 80 向外界公开。我该怎么做?

从概念上讲,我理解我需要一个由部署定义并由 AWS 负载均衡器公开的 pod。我不明白 k8s 如何有权代表我创建 ELB?

服务员容器图像是这里

我现在的情况如下。所有说明均来自这里

1) 使用 Ansible 创建集群(geerlingguy.docker 和 geerlingguy.kubernetes 角色)。此角色使用kubeadm

2)运行强制命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

3)运行第 4 层命令(我任意选择了 L4):

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/service-l4.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/patch-configmap-l4.yaml

4)验证安装:

$ kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch

NAMESPACE       NAME                           READY   STATUS    RESTARTS
ingress-nginx   nginx-ingress-controller-...   1/1     Running   0  

5)创建服务:

kubectl apply -f service.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: firstappservice
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: firstapp

6)创建部署:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: firstapp
  labels:
    app: firstapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: firstapp
  template:
    metadata:
      labels:
        app: firstapp
    spec:
      containers:
      - name: waiter
        image: adamgardnerdt/waiter:v1
        ports:
          - containerPort: 80

我确信我遗漏了一些简单但基本的东西。当然,我是一个彻头彻尾的 Kubernetes 菜鸟。

答案1

实现这一目标的一种方法是部署aws-alb-入口控制器

AWS ALB 入口控制器通过配置应用程序负载均衡器来满足 Kubernetes 入口资源的需求。

就像 AWS 中的所有内容一样,k8s 通过 IAM 获取代表您创建 ELB 资源的权限。

AWS API 访问

要执行操作,控制器必须具有访问和配置 ALB 资源所需的 IAM 角色能力。有很多方法可以实现这一点,例如将 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 加载为环境变量或使用 kube2iam。

可以在以下位置找到具有运行控制器的最低权限的示例 IAM 策略alb-iam-policy.json

aws-alb-ingress-controller/指南/控制器/配置/

相关内容