Estoy implementando K8S en el clúster de AWS EKS y uso ALB para las implementaciones. Me gustaría usar un ALB para varios servicios, pero no sé cómo compartir el mismo ALB. Cada vez que implemente un ingreso, anulará uno existente.
Tengo dos archivos de configuración yaml:
a.yaml
--- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sample-ingress namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/group.name: sample-ingress alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.order: '1' spec: rules: - http: paths: - path: /sample-app/* backend: serviceName: sample-entrypoint servicePort: 80b.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sample-ingress namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/group.name: sample-ingress alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.order: '2' spec: rules: - http: paths: - path: /sample-es/* backend: serviceName: sample-es-entrypoint servicePort: 9200Me gustaría que ambos compartan el mismo ALB, así que especifico que el nombre del grupo sea el mismo:
alb.ingress.kubernetes.io/group.name: sample-ingress
También especifico un orden diferente en los dos archivos.
pero cuando ejecuto kubectl apply -f a.yaml , crea un ALB con la regla que especifiqué en el archivo de configuración: /sample-app/* . Pero cuando ejecuto kubectl apply -f b.yaml , anula la regla existente con /sample-es/* . Entonces, ¿cómo puedo hacer que ambos compartan el mismo ALB y les permita proporcionar reglas diferentes?
Supongo que puede crear entradas separadas y adjuntarlas a la misma configuración de servicio. Apunte la configuración del servicio con alb, y eso debería funcionar. Tengo una configuración para servicios orientados al interior, vea si esto funciona para usted.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 labels: app.kubernetes.io/instance: goldendev-ingress-test app.kubernetes.io/managed-by: Tiller app.kubernetes.io/name: ingress-test environment: DEV helm.sh/chart: ingress-test name: ingress-test namespace: default spec: externalTrafficPolicy: Cluster ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app.kubernetes.io/instance: z1 app.kubernetes.io/name: gunicorn sessionAffinity: None type: LoadBalancerIngress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sample-ingress namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/group.name: sample-ingress alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.order: '1' spec: rules: - http: paths: - path: /mappings/v1/hello/* backend: serviceName: ingress-test servicePort: 80 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sample-ingress-1 namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/group.name: sample-ingress alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.order: '2' spec: rules: - http: paths: - path: /mappings/v1/teams/* backend: serviceName: ingress-test-2 servicePort: 80Verifiqué en la consola de AWS, ha creado solo 1 balanceador de carga con configuración de servicio. Lista de ingreso:
kubectl get ingress NAME HOSTS ADDRESS PORTS AGE sample-ingress * 80 19m sample-ingress-1 * 80 19mDéjeme saber si esto ayuda.
Lo he intentado con hosts como se muestra a continuación;
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: pub-uat-alb namespace: "uat-env" labels: imaharah-k8s/environment: staging annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: instance alb.ingress.kubernetes.io/tags: environment=staging alb.ingress.kubernetes.io/success-codes: '200,301,401' alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:123435678977:certificate/hskrhjf93ih-y4325kjhdsf0-hsr98 alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS-1-1-2017-01 alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' spec: rules: - http: paths: - path: /* backend: serviceName: ssl-redirect servicePort: use-annotation - host: test1.test.com http: paths: - path: /* backend: serviceName: test1-service servicePort: 80 - host: test2.test.com http: paths: - path: /* backend: serviceName: test2-service servicePort: 80 - host: test3.test.com http: paths: - path: /* backend: serviceName: test3-service servicePort: 80verificar --->
[centos@ip-10-0-68-81 pub]$ kubectl get ingress -n uat-env --kubeconfig=$dev NAME CLASS HOSTS ADDRESS PORTS AGE pub-uat-alb <none> test1.test.com,test2.test.com,test3.test.com test-uatenv-testtest-gfsadasd76-94238798.us-east-1.elb.amazonaws.com 80 3d6h