Kong 인그레스 Basic Auth 적용
샘플 서비스 설정
설명하기위해 클러스터에 httpbin 서비스를 설정하고 프록시합니다.
$ kubectl apply -f https://bit.ly/k8s-httpbin
service/httpbin created
deployment.apps/httpbin created
방금 만든 httpbin 서비스를 프록시하기 위해 인그레스 규칙을 만듭니다.
$ echo '
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo
annotations:
konghq.com/strip-path: "true"
kubernetes.io/ingress.class: kong
spec:
rules:
- http:
paths:
- path: /foo
backend:
serviceName: httpbin
servicePort: 80
' | kubectl apply -f -
ingress.extensions/demo created
아이피를 확인 하십시오.
$ kubectl get ingress demo
NAME HOSTS ADDRESS PORTS AGE
demo * 35.XXX.XXX.XX 80 80s
인그레스 규칙을 테스트 하십시오.
$ curl -i 35.XXX.XXX.XX/foo/status/200
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: gunicorn/19.9.0
Date: Tue, 02 Jun 2020 00:47:08 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Kong-Upstream-Latency: 10
X-Kong-Proxy-Latency: 1
Via: kong/2.0.4
서비스에 인증 추가
Kong을 사용하면 API 앞에 인증을 추가하는 것이 플러그인을 활성화하는것만큼 간단합니다. API를 보호하기 위해 KongPlugin 리소스와 Secret를 추가하겠습니다 :
$ echo '
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: httpbin-auth
config:
hide_credentials: true
plugin: basic-auth
' | kubectl apply -f -
kongplugin.configuration.konghq.com/httpbin-auth created
$ echo '
apiVersion: v1
kind: Secret
metadata:
name: httpbin-secret
type: Opaque
data:
kongCredType: YmFzaWMtYXV0aAo=
username: ZGVtbwo=
password: MTIzNDUK
' | kubectl apply -f -
secret/httpbin-secret created
또는 다음 명령어로 생성하십시오.
$ kubectl create secret generic httpbin-secret \
--from-literal=kongCredType=basic-auth \
--from-literal=username=demo --from-literal=password=12345
이제 이플러그인을 konghq.com/plugins annotation을 사용하여 생성 한 이전 인그레스 규칙과 연결하십시오.
$ kubectl patch ingress demo -p '{"metadata":{"annotations":{"konghq.com/plugins":"httpbin-auth"}}}'
ingress.extensions/demo patched
demo 인그레스에 정의 된 프록시 규칙과 일치하는 모든 요청에는 이제 유효한 API 키가 필요합니다.
$ curl -i 35.XXX.XXX.XX/foo/status/200
HTTP/1.1 401 Unauthorized
Date: Tue, 02 Jun 2020 01:03:33 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Basic realm="kong"
Content-Length: 26
X-Kong-Response-Latency: 0
Server: kong/2.0.4
{"message":"Unauthorized"}