我想在 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。