osm-edge 서비스 메시와 함께 FSM 인그레스 컨트롤러 사용
11540 단어 ingresspipyservicemeshkubernetes
배경
Kubernetes Ingress API는 Ingress 구현이 운영 직원이 관리하는 엔트리 기능 인프라를 제공하는 분리된 관심사로 설계되었습니다. 또한 애플리케이션 소유자가 규칙을 통해 백엔드로의 요청 라우팅을 제어할 수 있습니다.
osm-edge은 수신 트래픽을 관리하기 위해 여러 수신 구현을 지원하고
IngressBackend
API를 제공하여 신뢰할 수 있는 수신 지점에서 액세스를 수신하도록 백엔드 서비스를 구성합니다. 이 문서는 수신 트래픽을 관리하기 위해 osm-edge와 FSM의 통합에 중점을 둡니다.FSM 소개
FSM은 Kubernetes 남북 트래픽, 게이트웨이 API 컨트롤러 및 다중 클러스터 관리를 위한 Flomesh의 또 다른 오픈 소스 제품입니다. FSM은 코어에서 프로그래밍 가능한 프록시인 Pipy을 사용하고 수신 컨트롤러, 게이트웨이 API 컨트롤러, 로드 밸런서, 클러스터 간 서비스 등록 검색 등을 제공합니다.
FSM과 통합
FSM은 이미 osm-edge 내부에 통합되어 있으며 osm-edge 설치 중에 활성화할 수 있습니다. 또한 기존 osm-edge 메쉬에 대해 helm을 통해 독립적으로 설치할 수도 있습니다.
전제 조건
다음 위치에서 osm-edge CLI를 다운로드합니다.
system=$(uname -s | tr [:upper:] [:lower:])
arch=$(dpkg --print-architecture)
release=v1.1.1
curl -L https://github.com/flomesh-io/osm-edge/releases/download/${release}/osm-edge-${release}-${system}-${arch}.tar.gz | tar -vxzf -
. /${system}-${arch}/osm version
cp . /${system}-${arch}/osm /usr/local/bin/
통합 설치
export osm_namespace=osm-system
export osm_mesh_name=osm
osm install --set fsm.enabled=true \
--mesh-name "$osm_mesh_name" \
--osm-namespace "$osm_namespace"
독립형 설치
FSM을 활성화하지 않고 osm-edge를 설치한 경우 독립 실행형 설치를 사용하여 설치할 수 있습니다.
helm repo add fsm https://charts.flomesh.io
export fsm_namespace=osm-system
helm install fsm fsm/fsm --namespace "$fsm_namespace" --create-namespace
모든 팟(Pod)이 제대로 작동하고 실행 중인지 확인하십시오.
kubectl get pods -n osm-system
NAME READY STATUS RESTARTS AGE
repo-8756f76fb-2f78g 1/1 Running 0 5m53s
manager-866585bbd5-pbg7q 1/1 Running 0 5m53s
osm-bootstrap-7c6689ff57-47ksk 1/1 Running 0 5m53s
osm-controller-57888cfc7c-tnqxl 2/2 Running 0 5m52s
osm-injector-5f77898899-45f65 1/1 Running 0 5m53s
bootstrap-fd5894bcc-nr7hf 1/1 Running 0 5m53s
cluster-connector-local-68c7584c8b-qf7xm 1/1 Running 0 2m43s
ingress-pipy-6fb8c8b794-pgthl 1/1 Running 0 5m53s
구성
백엔드 트래픽에 대한 액세스를 제한하여 클라이언트에 권한을 부여하기 위해
IngressBackend
엔드포인트의 수신 트래픽만 백엔드 서비스로 라우팅될 수 있도록 ingress-pipy-controller
를 구성합니다. ingress-pipy-controller
엔드포인트를 검색하려면 osm-edge controller
및 이를 모니터링할 해당 네임스페이스가 필요합니다. 그러나 FSM이 제대로 작동하는지 확인하기 위해 사이드카로 주입할 수 없습니다.kubectl label namespace "$osm_namespace" openservicemesh.io/monitored-by="$osm_mesh_name"
나중에 백엔드 애플리케이션에 대한 액세스를 테스트하는 데 사용할 항목 게이트웨이의 외부 IP 주소와 포트를 저장합니다.
export ingress_host="$(kubectl -n "$osm_namespace" get service ingress-pipy-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}') "
export ingress_port="$(kubectl -n "$osm_namespace" get service ingress-pipy-controller -o jsonpath='{.spec.ports[? (@.name=="http")].port}')"
echo $ingress_host:$ingress_port
샘플 서비스 배포
다음 단계는 샘플
httpbin
서비스를 배포하는 것입니다.## Create namespace kubectl create ns httpbin
kubectl create ns httpbin
# Add the namespace to the grid
osm namespace add httpbin
# Deploy the application
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: httpbin
namespace: httpbin
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
namespace: httpbin
labels:
app: httpbin
service: httpbin
spec:
ports:
- name: http
port: 14001
selector:
app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
namespace: httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
serviceAccountName: httpbin
containers:
- image: kennethreitz/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
command: ["gunicorn", "-b", "0.0.0.0:14001", "httpbin:app", "-k", "gevent"]
ports:
- containerPort: 14001
EOF
팟(Pod)과 서비스가 작성되었고 애플리케이션이 성공적으로 실행 중인지 확인하십시오.
kubectl get pods,services -n httpbin
NAME READY STATUS RESTARTS AGE
pod/httpbin-54cc8cf5d-7vclc 2/2 Running 0 14s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/httpbin ClusterIP 10.43.105.166 <none> 14001/TCP 14s
입력 규칙 구성
다음으로 클러스터 외부에서 배포된
httpbin
서비스에 액세스하고 수신 구성 규칙을 제공해야 합니다.kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: httpbin
namespace: httpbin
annotations:
pipy.ingress.kubernetes.io/rewrite-target-from: /httpbin
pipy.ingress.kubernetes.io/rewrite-target-to: /httpbin
spec:
ingressClassName: pipy
rules:
- host: httpbin.org
http:
paths:
- path: /httpbin
pathType: Prefix
backend:
service:
name: httpbin
port:
number: 14001
EOF
위에 기록된 IP 주소와 포트를 사용하여
httpbin
서비스에 액세스하면 다음과 같은 502 Bad Gateway
오류 응답이 발생합니다. 이는 FSM의 인그레스를 신뢰할 수 있는 포털로 설정하지 않았기 때문입니다.curl -sI http://"$ingress_host":"$ingress_port"/httpbin/get -H "Host: httpbin.org"
HTTP/1.1 502 Bad Gateway
content-length: 0
connection: keep-alive
다음 명령을 실행하여 FSM 수신을 신뢰할 수 있는 항목으로 설정합니다.
kubectl apply -f - <<EOF
kind: IngressBackend
apiVersion: policy.openservicemesh.io/v1alpha1
metadata:
name: httpbin
namespace: httpbin
spec:
backends:
- name: httpbin
port:
number: 14001 # targetPort of httpbin service
protocol: http
sources:
- kind: Service
namespace: "$osm_namespace"
name: ingress-pipy-controller
EOF
httpbin
서비스를 다시 요청하면 성공적으로 액세스할 수 있습니다.curl -sI http://"$ingress_host":"$ingress_port"/httpbin/get -H "Host: httpbin.org"
HTTP/1.1 200 OK
server: gunicorn/19.9.0
date: Thu, 18 Aug 2022 05:18:50 GMT
content-type: application/json
content-length: 241
access-control-allow-origin: *
access-control-allow-credentials: true
osm-stats-namespace: httpbin
osm-stats-kind: Deployment
osm-stats-name: httpbin
osm-stats-pod: httpbin-54cc8cf5d-7vclc
connection: keep-alive
요약
FSM Ingress는 포털 트래픽을 쉽게 관리할 수 있도록 Kubernetes 클러스터 내에서 애플리케이션 액세스 지점을 노출합니다. osm-edge의 IngressBackend API는 메시 내의 서비스를 대중에게 노출하여 우발적인 데이터 유출에 대한 추가 방어선을 제공합니다.
Reference
이 문제에 관하여(osm-edge 서비스 메시와 함께 FSM 인그레스 컨트롤러 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/flomesh/using-fsm-ingress-controller-with-osm-edge-service-mesh-4moe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)