GCP/GKE环境Kubernetes Ingress创建及AWS ALB配置适配方法
核心问题解答
- 你提供的配置是通过
kubernetes.io/ingress.class: alb这个注解标识为AWS专属Ingress的:alb并不是Kubernetes官方统一规定的枚举值,而是AWS自研的「AWS Load Balancer Controller(原ALB Ingress Controller)」自定义的识别标识。只有你的K8s集群中部署了这个AWS官方维护的控制器,才会监听到标注了alb类的Ingress资源,进而调用AWS API创建ALB实例。Kubernetes官方文档只会定义Ingress注解的通用格式,不会收录各厂商自定义的class取值,所以你在K8s官方文档找不到alb的定义属于正常情况。 - kubectl没有内置任何云厂商的对接客户端:所有云厂商Ingress的创建逻辑完全由集群中部署的对应Ingress控制器实现,和kubectl无关。集群里没有部署对应控制器的话,哪怕你写了对应class的Ingress配置,也只会停留在K8s资源层面,不会真的创建云厂商的负载均衡资源。
- GKE对应Ingress的
kubernetes.io/ingress.class取值:- 公网Ingress用
gce,对应GCP的外部HTTP(S)负载均衡 - 内网Ingress用
gce-internal,对应GCP的内部HTTP(S)负载均衡
- 公网Ingress用
GKE适配版Ingress配置示例
原配置使用的extensions/v1beta1是已废弃的老旧API版本,适配GKE的稳定版配置参考如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-web-server namespace: myapp annotations: kubernetes.io/ingress.class: "gce-internal" # 匹配原配置的内网属性 networking.gke.io/load-balancer-type: "Internal" # 原配置的安全组能力对应GCP防火墙规则,可按需添加对应注解配置访问控制 app.kubernetes.io/name: my-gke-ingress-web-server app.kubernetes.io/component: my-gke-ingress spec: rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: my-web-server port: number: 8080
注:所有
alb.ingress.kubernetes.io/开头的AWS专属注解,在GKE中需要替换为networking.gke.io/开头的对应功能注解即可。
内容的提问来源于stack exchange,提问作者simplezarg
相关产品推荐
相关产品推荐

