sping cloud gateway와 k8s의 배치와 구덩이
gateway를 어떻게 구축하는지gateway 구축을 보십시오 다음에 제가 새로운 의존을 추가합니다
implementation("org.springframework.cloud:spring-cloud-commons")
implementation("org.springframework.cloud:spring-cloud-kubernetes-core")
implementation("org.springframework.cloud:spring-cloud-kubernetes-discovery")
implementation("org.springframework.cloud:spring-cloud-starter-kubernetes-ribbon")
implementation("org.springframework.cloud:spring-cloud-starter-netflix-ribbon")
implementation("org.springframework.cloud:spring-cloud-starter-netflix-hystrix")
implementation("org.springframework.boot:spring-boot-starter-webflux")
여기는 주로 편과 달리 나는gradle을 사용하지만, 사실은 완전하지 않다yaml은 다음과 같다.
server:
port: 8888
spring:
redis:
host:
port: 6379
cloud:
gateway:
enabled: true
discovery:
locator:
enabled: true
routes:
- id: all
uri: lb:// /
predicates:
- Path=/**
filters:
- name: RequestRateLimiter
args:
rate-limiter: "#{@userLevelRedisRateLimiter}"
key-resolver: "#{@userKeyResolver}"
redis-rate-limiter.replenishRate: 1
redis-rate-limiter.burstCapacity: 3
logging:
level:
org.springframework.cloud.gateway: debug
org.springframework.web: debug
product-infra-service:
ribbon:
KubernetesNamespace: default
backend:
ribbon:
eureka:
enabled: false
client:
enabled: true
ServerListRefreshInterval: 5000
hystrix:
command:
BackendCall:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
threadpool:
BackendCallThread:
coreSize: 5
feign:
hystrix:
enabled: true
docker가 거울로 포장된 후 k8s배치yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: gateway
labels:
name: gateway
spec:
replicas: 1
selector:
name: gateway
template:
metadata:
labels:
name: gateway
spec:
containers:
- name: gateway
image:
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8888
service
apiVersion: v1
kind: Service
metadata:
name: gateway
labels:
name: gateway
spec:
type: NodePort
ports:
- port: 8888
nodePort: 32223
selector:
name: gateway
명령kubectl create -f 파일 이름.yaml 이후 minikube 서비스gateway - url 서비스 외부 접근 경로가 얼마나 되는지 볼 수 있습니다. 테스트하기 편리하지만 문제가 있습니다. 서비스가 찾을 수 없는 상황이 발생할 수 있습니다. 권한이 없기 때문입니다.
# NOTE: The service account `default:default` already exists in k8s cluster.
# You can create a new account following like this:
#---
#apiVersion: v1
#kind: ServiceAccount
#metadata:
# name:
# namespace:
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: fabric8-rbac
subjects:
- kind: ServiceAccount
# Reference to upper's `metadata.name`
name: default
# Reference to upper's `metadata.namespace`
namespace: default
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
이미 추가하면 됩니다.
하나.gateway는 프로젝트의 가능한 점에 영향을 줄 수 있습니다
첫 번째:gateway 용기에 루트를 통해 전송되면 업무 용기에 전송
request의header:x-forwarded-for는 두 번의 IP를 기록하는데 변환할 때 문제가 있을 수 있습니다.
두 번째:gateway 전역 문제
gateway 용기에 요청을 보낼 때, 크로스 필드가 되면 403 오류가 발생합니다. 여기에 코드를 추가해야 합니다. (제 쪽에서 사용하는kotlin은 자바로 전환하십시오.)
@Bean
fun corsFilter(): CorsWebFilter {
val config = CorsConfiguration()
config.addAllowedMethod("*")
config.addAllowedOrigin("*")
config.addAllowedHeader("*")
val source = UrlBasedCorsConfigurationSource(PathPatternParser())
source.registerCorsConfiguration("/**", config)
return CorsWebFilter(source)
}
그러나 어떤 사람들은 여전히 문제를 해결하지 못했다. 403이 잘못 보고하지 않았기 때문이다. 그러나 또 코즈가 정수리를 반복하는 문제가 발생했다. (Access-Control-Allow-Origin은 두 개가 나타난다) 이gateway의 버그는 먼저 버전이 바뀌었는지 모르겠다. 여기에 추가해야 한다.
class CorsResponseHeaderFilter : GlobalFilter, Ordered {
override fun getOrder(): Int { // gateway 。 return Ordered.LOWEST_PRECEDENCE
// gateway filter filter
return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1
}
override fun filter(exchange: ServerWebExchange, chain: GatewayFilterChain): Mono<Void> {
val log = LogFactory.getLog(this.javaClass)
log.info("CorsResponseHeaderFilter ")
return chain.filter(exchange).then(Mono.defer {
exchange.response.headers.entries
.filter { kv -> kv.value.size > 1 }
.filter { kv -> kv.key == HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN || kv.key == HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS }
.forEach { kv ->
kv.setValue(arrayListOf(kv.value[0]))
}
chain.filter(exchange)
})
}
}
배치에 있어서 거의 문제가 없다
만약 중복 헤더의 문제가 있다면, 업무 용기가 코어스에도 설정되어 영향을 미쳤는지 검사해야 한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.