1.3. OpenShift Serverless와 Service Mesh 통합
Kourier를 기본 수신으로 사용하지 않고 OpenShift Serverless와 Service Mesh를 통합할 수 있습니다. 이렇게 하려면 다음 절차를 완료하기 전에 Knative Serving 구성 요소를 설치하지 마십시오. 일반 Knative Serving 설치 절차에서는 KnativeServing
CRD(사용자 정의 리소스 정의)를 생성하여 Knative Serving을 Service Mesh와 통합할 때 추가 단계가 필요합니다. 이 절차는 Service Mesh를 OpenShift Serverless 설치의 기본 및 수신으로 통합하려는 경우 유용할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- 프로젝트를 생성하거나 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
Red Hat OpenShift Service Mesh Operator를 설치하고
istio-system
네임스페이스에ServiceMeshControlPlane
리소스를 생성합니다. mTLS 기능을 사용하려면ServiceMeshControlPlane
리소스의spec.security.dataPlane.mtls
필드도true
로 설정해야 합니다.중요Service Mesh에서 OpenShift Serverless를 사용하는 것은 Red Hat OpenShift Service Mesh 버전 2.0.5 이상에서만 지원됩니다.
- OpenShift Serverless Operator를 설치합니다.
-
OpenShift CLI(
oc
)를 설치합니다.
프로세스
Service Mesh와 통합할 네임스페이스를
ServiceMeshMemberRoll
오브젝트에 멤버로 추가합니다.apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members: 1 - knative-serving - knative-eventing - <namespace>
- 1
- Service Mesh와 통합할 네임스페이스 목록입니다.
중요이 네임스페이스 목록에
knative-serving
및knative-eventing
네임스페이스가 포함되어야 합니다.ServiceMeshMemberRoll
리소스를 적용합니다.$ oc apply -f <filename>
Service Mesh가 트래픽을 수락할 수 있도록 필요한 게이트웨이를 생성합니다.
HTTP를 사용하는
knative-local-gateway
오브젝트의 예apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-ingress-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs> 1 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 8081 name: http protocol: HTTP 2 hosts: - "*" --- apiVersion: v1 kind: Service metadata: name: knative-local-gateway namespace: istio-system labels: experimental.istio.io/disable-gateway-port-translation: "true" spec: type: ClusterIP selector: istio: ingressgateway ports: - name: http2 port: 80 targetPort: 8081
HTTPS를 사용하는
knative-local-gateway
오브젝트의 예apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs>
Gateway
리소스를 적용합니다.$ oc apply -f <filename>
다음
KnativeServing
CRD(사용자 정의 리소스 정의)를 생성하여 Knative Serving을 설치하여 Istio 통합을 활성화합니다.apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ingress: istio: enabled: true 1 deployments: 2 - name: activator annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: autoscaler annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
KnativeServing
리소스를 적용합니다.$ oc apply -f <filename>
다음
KnativeEventing
CRD(사용자 정의 리소스 정의)를 생성하여 Knative Eventing을 설치하여 Istio 통합을 활성화합니다.apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: features: istio: enabled 1 workloads: - name: pingsource-mt-adapter annotations: "sidecar.istio.io/inject": "true" 2 "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: imc-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: mt-broker-ingress annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: mt-broker-filter annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
Knative Eventing과 서비스 메시 통합은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
KnativeEventing
리소스를 적용합니다.$ oc apply -f <filename>
다음
KnativeKafka
CRD(사용자 정의 리소스 정의)를 생성하여 Knative Kafka를 설치하여 Istio 통합을 활성화합니다.apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: name: knative-kafka namespace: knative-eventing spec: channel: enabled: true bootstrapServers: <bootstrap_servers> 1 source: enabled: true broker: enabled: true defaultConfig: bootstrapServers: <bootstrap_servers> 2 numPartitions: <num_partitions> replicationFactor: <replication_factor> sink: enabled: true workloads: 3 - name: kafka-controller annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-broker-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-broker-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-channel-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-channel-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-source-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-sink-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
Knative Eventing과 서비스 메시 통합은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
KnativeKafka
리소스를 적용합니다.$ oc apply -f <filename>
ServiceEntry
를 설치하여 Red Hat OpenShift Service Mesh가KnativeKafka
구성 요소와 Apache Kafka 클러스터 간의 통신을 인식하도록 합니다.apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: kafka-cluster namespace: knative-eventing spec: hosts: 1 - <bootstrap_servers_without_port> exportTo: - "." ports: 2 - number: 9092 name: tcp-plain protocol: TCP - number: 9093 name: tcp-tls protocol: TCP - number: 9094 name: tcp-sasl-tls protocol: TCP - number: 9095 name: tcp-sasl-plain protocol: TCP - number: 9096 name: tcp-noauth protocol: TCP location: MESH_EXTERNAL resolution: NONE
참고spec.ports
에 나열된 포트는 예제 TCP 포트이며 Apache Kafka 클러스터 구성 방법에 따라 달라집니다.ServiceEntry
리소스를 적용합니다.$ oc apply -f <filename>
중요주소가 ServiceEntry에 설정되어 있는지 확인합니다. 주소가 설정되지 않은 경우 호스트에 관계없이 ServiceEntry에 정의된 포트의 모든 트래픽이 일치합니다.
검증
사이드카 삽입이 활성화되고 패스쓰루(pass-through) 경로를 사용하는 Knative 서비스를 생성합니다.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> namespace: <namespace> 1 annotations: serving.knative.openshift.io/enablePassthrough: "true" 2 spec: template: metadata: annotations: sidecar.istio.io/inject: "true" 3 sidecar.istio.io/rewriteAppHTTPProbers: "true" spec: containers: - image: <image_url>
Service
리소스를 적용합니다.$ oc apply -f <filename>
검증
CA에서 신뢰하는 보안 연결을 사용하여 서버리스 애플리케이션에 액세스합니다.
$ curl --cacert root.crt <service_url>
명령 예
$ curl --cacert root.crt https://hello-default.apps.openshift.example.com
출력 예
Hello Openshift!