Knative Service 는 포트 와 프로 토 콜 을 어떻게 지정 합 니까?

Knative Serving 을 사용 하여 Nginx 를 배치 하면 서비스 가 시작 되 었 지만 Nginx 에 접근 할 수 없습니다.물론 이것 은 Nginx 의 문제 가 아니다. 이것 은 Knative 가 Container 의 포트 에 대한 요구 가 있 기 때문이다.기본 Nginx 의 서비스 포트 는 80 이 고, Knative Serving queue 8012 는 기본적으로 용기 로 대리 되 는 8080 포트 입 니 다.따라서 업무 용기 가 8080 포트 의 기본 설정 이 아니라면 외부 노출 서 비 스 를 할 수 없습니다.구체 적 인 spec 정 의 는 다음 과 같 습 니 다: https://github.com/kubedemo/serving/blob/v0.6.0/docs/spec/spec.md
주: 물론 여러 포트 를 감청 하려 면 안 됩 니 다. 용기 가 작 동 되 지만 Service 를 통 해 서 비 스 를 노출 할 수 없 기 때문에 Istio gateway 를 통 해 외부 에 노출 되 지 못 하기 때문에 서 비 스 를 제공 할 수 없습니다.
상술 한 Spec 정 의 를 볼 때 아래 두 줄 의 주석 을 알 아 차 렸 을 수도 있 습 니 다.왜 이 몇 개의 포트 를 보존 합 니까?
다음은 제 가 한 장의 그림 을 통 해 Knative Serving 트 래 픽 퍼 가기 링크 를 설명 하 겠 습 니 다.
위의 그림 에서 보 듯 이 업무 흐름 은 Gateway 에서 업무 용기 에 직접 전 화 된 것 이 아니 라 queue 용 기 를 통 해 전 송 된 것 이다.queue 용 기 는 기본적으로 8012 와 8013 을 감청 하여 각각 http1 의 데이터 와 http2 의 데 이 터 를 전달 합 니 다.구체 적 인 코드 참조:
queue 용 기 는 만 들 때 USER 라 고 설정 합 니 다.PORT 의 환경 변수, queue 는 이 환경 변 수 를 통 해 업무 용기 에 전달 해 야 할 포트 를 가 져 옵 니 다.그래서 우리 가 USER 를 수정 할 수만 있다 면PORT 라 는 환경 변 수 는 감청 포트 를 사용자 정의 할 수 있 습 니 다.USER_PORT 는 getUserPort 함 수 를 통 해 얻 을 수 있 습 니 다. 구체 적 인 함 수 는 다음 과 같 습 니 다.
코드 를 여기까지 읽 으 면 밝 아 집 니 다. Knative Service 를 만 들 때 Ports 포트 를 지정 한 다음 포트 의 containerport 필드 를 통 해 사용자 정의 포트 를 지정 할 수 있 습 니 다.그러나 주의해 야 할 것 은 Knative 가 하나의 용기 포트 만 지원 하기 때문에 Ports 는 하나의 배열 이지 만 하나만 설정 할 수 있 습 니 다.
실례 는 다음 과 같다.
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: wordpress-serving
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: wordpress
      annotations:
        autoscaling.knative.dev/target: "100"
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/wordpress:5.2-20190524100810
          ports:
            - name: http1
              containerPort: 80
          env:
          - name: WORDPRESS_DB_HOST
            value: rm-2xx.mysql.rds.aliyuncs.com:3306
          - name: WORDPRESS_DB_USER
            value: wordpress
          - name: WORDPRESS_DB_PASSWORD
            value: xxx
          imagePullPolicy: Always

위 에서 분석 하 는 과정 에서 HTTP 2 프로 토 콜 을 언급 했 는데 현재 grpc 형식의 서 비 스 를 제공 하려 면 http2 프로 토 콜 을 사용 해 야 합 니 다.
HTTP 2 프로 토 콜 을 사용 했다 면 요청 을 하려 면 queue 의 8013 포트 에 전송 한 다음 8013 에서 용기 에 전달 하 는 업무 포트 가 필요 합 니 다.그렇다면 우리 가 사용 하 는 협 의 를 어떻게 지정 합 니까?
앞의 분석 에서 우리 가 얻 은 결론 은 port [0]. container Port 를 통 해 사용자 정의 포트 를 지정 하 는 것 이 고 사실은 port [0]. name 필드 도 지정 할 수 있다 는 것 이다.Revision Controller 가 Deployment 배치 서 비 스 를 생 성 할 때 이 name 필드 에서 http1 (8012 포트) 프로 토 콜 을 사용 해 야 하 는 지, http2 (8013 포트) 프로 토 콜 을 사용 해 야 하 는 지 판단 합 니 다.
  • http1 대 표 는 http1 (8012 포트) 프로 토 콜 을 사용 하 는 동시에 http1 도 기본 정책 입 니 다. 즉, 지정 되 지 않 으 면 기본 값 도 http1 프로 토 콜
  • 입 니 다.
  • h2c 대 표 는 http2 (8013 포트) 프로 토 콜
  • 을 사용 합 니 다.
    코드 분석 은 다음 과 같다.
    https://github.com/kubedemo/serving/blob/release-0.6/pkg/apis/serving/v1alpha1/revision_lifecycle.go#L104
    그러면 어떻게 해야만 용기 의 사용자 정의 포트 를 지정 할 수 있 습 니까?코드 를 찾 아 보면 알 수 있 습 니 다.
    https://github.com/kubedemo/serving/blob/release-0.6/pkg/reconciler/serverlessservice/resources/services.go#L32
    작은 매듭
    Knative Service 는 용기 에 ports 필드 를 추가 할 수 있 으 며, ports 는 하나의 포트 만 설정 할 수 있 습 니 다.ports 에는 두 개의 키 필드 가 있 습 니 다 Name 과 Container Port
              ports:
                - name: http1
                  containerPort: 80
  • name 필드 에서 사용 하 는 프로 토 콜 을 표시 합 니 다. 유효 치 는 http1 과 h2c 두 개 입 니 다. 그 중에서:
  • http1 은 http1 프로 토 콜 을 사용 하 는 것 을 나타 낸다. 예 를 들 어 웹 서비스 와 websock 은 모두 http1
  • 을 사용 할 수 있다.
  • grpc 는 h2c
  • 로 설정 해 야 합 니 다.
  • container Port 필드 는 용기 가 서 비 스 를 제공 하 는 유일한 포트 입 니 다.업무 포트 는 1 - 65535 이 범위 에서 8012, 8013, 8022, 8091 과 8092 를 제외 한 임 의 포트
  • 를 설정 할 수 있다.
    아 리 클 라 우 드 더 블 11 억 위안 의 보조금 을 미리 받 고 아이 폰 11 프로 추출 에 들 어 갑 니 다.https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110
    동도
    원문 을 읽다
    본 고 는 운 서 지역사회 의 오리지널 내용 으로 허락 없 이 전재 할 수 없다.

    좋은 웹페이지 즐겨찾기