AWS ALB 및 nginx-ingress-controller를 사용한 Kubectl exec/port-forward

3187 단어 kubernetesalbnginxaws
EKS 및 ALB를 사용하는 Rancher 클러스터에서 exec 또는 port-forward 옵션으로 kubectl을 수행할 때 문제가 발생했습니다. 이 오류가 발생했습니다.

kubectl exec -it app -- bash

Error from server (BadRequest): Upgrade request required


exec 및 port forward는 SPDY 프로토콜을 사용하고 있으며 ALB는 이를 지원하지 않습니다.

HTTPS 요청은 사용자에서 ALB로 이동한 다음 ALB에서 SSL이 종료되고 요청은 Rancher 서비스로 전달된 후 Nginx 컨트롤러 서비스로 전달됩니다.

그 후에 다음을 수행해야 합니다.

1- Nginx 수신 컨트롤러 설치
Kubernetes v1.19+ 버전 4.x.x 사용
Kubernetes v1.16+ 버전 3.x.x 사용

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update



helm upgrade --install nginx ingress-nginx/ingress-nginx --namespace cattle-system --set controller.service.type=NodePort  --set controller.service.targetPorts.https=http --set-string controller.config.use-forwarded-headers="true" --version 3.12.0


2- Rancher Ingress 편집

kubectl edit ingress -n cattle-system rancher


다음을 사용하여 사양 내부의 호스트 및 이름을 변경합니다.


spec:
   rules:
   - host: '*.example.com'
     http:
       paths:
       - backend:
           service:
             name: nginx-ingress-nginx-controller
             port:
               number: 80
         pathType: ImplementationSpecific


3- 다음을 사용하여 새 인그레스를 만듭니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: rancher-exec
  namespace: cattle-system

spec:
   rules:
   - host: 'rancher.example.com'
     http:
       paths:
       - backend:
           service:
             name: rancher
             port:
               number: 80
         pathType: ImplementationSpecific


kubectl exec 및 port-forward 테스트

kubectl create deployment nginx2 --image nginx:alpine
kubectl expose deployment nginx2 --port=80
kubectl exec -it nginx2-XXXXX -- sh
kubectl port-forward service/nginx2 --address 0.0.0.0 80:80


*Kubernetes v1.19+를 사용 중인 경우 *
nginx 버전 4.x.x를 설치해야 합니다.

helm upgrade --install nginx ingress-nginx/ingress-nginx --namespace cattle-system --set controller.service.type=NodePort  --set controller.service.targetPorts.https=http --set-string controller.config.use-forwarded-headers="true" --version 4.2.3


rancher-exec에 대해서만 ingressClassName: nginx를 추가해야 합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: rancher-exec
  namespace: cattle-system

spec:
   ingressClassName: nginx 
   rules:
   - host: 'rancher.example.com'
     http:
       paths:
       - backend:
           service:
             name: rancher
             port:
               number: 80
         pathType: ImplementationSpecific


참고: rancher ingress에 ingressClassName: nginx를 추가하면 ALB가 제거됩니다.

좋은 웹페이지 즐겨찾기