본문 바로가기

개발하자

Kubernetes 입력 재작성

반응형

Kubernetes 입력 재작성

나는 현재 PHP 모노리스를 쿠버네티스로 포팅하고 있는데, URL을 다시 쓰는 데 문제가 있다.

그 시스템은 사용하고 그것은 모두 잘 작동한다. 문제는 nginx 입력이 양호하게 재생되도록 설정하는 것입니다.

이전 시스템에는 다음과 같은 재작성 규칙이 있었습니다:

try_files $uri $uri/ @rewrite;

location @rewrite {
  rewrite ^/(.*)$ /index.php?_url=/$1;
}

location / {
  try_files $uri $uri/ =404;
}

location ~ \.php$ {
  try_files $uri =404;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass 1.2.3.4:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ {
  expires max;
  log_not_found off;
  rewrite "/[a-z0-9]{40}/([^.]+)\.(js|css|png|jpg|jpeg|gif|svg)$" /assets/$1.$2;
}

나는 내 nginx 입력을 위해 다음 주석을 시도했다:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /index.php?_url=/$1
  hosts:
    - site.kube
  paths: [
    /(.*),
    /[a-z0-9]{40}/([^.]+)\.(js|css|png|jpg|jpeg|gif|svg)$
  ]

다음은 저의 질문입니다:

  • 파라미터를 사용하는 것이 아니라 파라미터를 사용합니다. 어떻게 설정해야 하나요? rewrite-target을 로 설정하면 경로는 작동하지만 다음과 같습니다:

  • 자산에 대한 경로는 어떻게 구현합니까?

제가 더 많은 정보를 제공할 수 있는지 알려주세요. 감사해요.


편집

댓글의 질문에 대한 응답으로, 여기 몇 가지 버전 출력이 있다.

쿠베르네테스(최신 미니쿠베, 작성 당시):

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-14T04:24:29Z", GoVersion:"go1.12.13", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

():

$ kubectl describe pod nginx-ingress-controller-6fc5bcc8c9-qnmz2 -n kube-system
{
    [ ... ]
    Image:         quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1,
    [ ... ]
}




해결책을 찾았어요!

그 이유는 루트 블록이 처리되지 않기 때문입니다. 이는 내 배포에서 nginx 포드로 요청을 적절하게 전파하기 위해 필요한 다음 줄과 관련이 있으며, 이 줄은 입력 주석으로 필요합니다:

nginx.ingress.kubernetes.io/rewrite-target: /$1

그것을 작동시키기 위해, 내가 한 일은 다음과 같은 것뿐이었다:

  1. nginx 구성을 위한 내 구성 맵에서, 나는 -블록에서 을 제거했다.

  2. -블럭에서 다음과 같이 변경했습니다:

    try_files $uri $uri/ =404;
    

    수신인:

    try_files $uri $uri/ @rewrite;
    

이렇게 함으로써 문제가 해결되었는데, 왜냐하면 tngx로 들어오는 모든 요청은 결국 -block에 들어가게 되고 따라서 서버의 요청을 우회하기 때문이다.


반응형