Kubeview를 Kubernetes 클러스터에 배포한 후 인증 없이 접근할 수 있는 문제를 해결하기 위해서는, Kubeview에 인증 및 권한 관리를 적용해야 합니다. 일반적으로 Kubernetes에 서비스로 배포된 애플리케이션에 인증을 적용하려면, 다음 두 가지 방법을 사용할 수 있습니다.
- Ingress에 기본 인증 적용 방법
Kubeview에 접근하기 위해 Ingress를 설정하고 Ingress에서 인증을 처리하는 방법입니다. Ingress는 HTTP/HTTPS 라우팅을 제공하며, 외부에서 오는 트래픽을 클러스터 내부의 서비스로 전달합니다. 이와 함께 기본 인증이나 OAuth 2.0, OIDC(OpenID Connect) 같은 인증 방법을 추가할 수 있습니다.기본 인증을 추가하기 위해서는, Kubernetes의Ingress
와htpasswd
를 이용해 사용자 인증을 구성할 수 있습니다.- htpasswd 파일 생성
인증을 위한 사용자 이름과 비밀번호를 생성합니다.
이 명령은 사용자 이름과 비밀번호가 포함된sudo apt-get install apache2-utils # 필요한 경우 설치 htpasswd -c auth myuser # 'myuser'는 사용자 이름입니다.
auth
라는 파일을 생성합니다. - Secret 생성
생성된auth
파일을 Kubernetes Secret으로 등록합니다.kubectl create secret generic basic-auth --from-file=auth
- Ingress 설정
Kubeview에 대한 Ingress 설정을 작성합니다. 아래는 기본 인증을 적용한 Ingress의 예입니다.이 설정에서는 NGINX Ingress Controller를 사용하여 기본 인증을 적용하는 방법을 보여줍니다.kubeview.example.com
도메인으로 접근 시, 사용자 이름과 비밀번호를 요구하게 됩니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubeview-ingress annotations: nginx.ingress.kubernetes.io/auth-type: "basic" nginx.ingress.kubernetes.io/auth-secret: "basic-auth" nginx.ingress.kubernetes.io/auth-realm: "Authentication Required" spec: rules: - host: kubeview.example.com http: paths: - path: / pathType: Prefix backend: service: name: kubeview port: number: 80
- htpasswd 파일 생성
- OAuth 2.0 또는 OIDC 기반 인증 적용
보다 강력한 인증 방법을 원할 경우, OAuth 2.0 또는 OIDC를 사용하여 인증을 처리할 수 있습니다. 이 경우 Keycloak, Dex 등의 인증 프로바이더와 Ingress Controller를 연동하여 세부적인 인증 관리를 수행할 수 있습니다.
예를 들어,oauth2-proxy
를 사용하여 OAuth 인증을 적용할 수 있습니다. 아래는 OAuth 2.0 인증을 적용하는 기본적인 절차입니다.- oauth2-proxy 설치
Helm 차트를 이용해 설치할 수 있습니다.helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests helm install oauth2-proxy/oauth2-proxy --name kubeview-oauth2-proxy
oauth2-proxy
는 외부 OAuth 2.0 공급자를 통해 인증을 처리해 주는 프록시입니다. - Ingress에 OAuth 2.0 적용
oauth2-proxy
와 연동된 Ingress 설정을 추가합니다.이 방식은 GitHub, Google, Keycloak 등의 OAuth 2.0 제공자와 연동하여 안전하게 Kubeview에 인증을 적용할 수 있습니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubeview-ingress annotations: nginx.ingress.kubernetes.io/auth-url: "https://<oauth2-proxy-url>/oauth2/auth" nginx.ingress.kubernetes.io/auth-signin: "https://<oauth2-proxy-url>/oauth2/start?rd=$request_uri" spec: rules: - host: kubeview.example.com http: paths: - path: / pathType: Prefix backend: service: name: kubeview port: number: 80
- oauth2-proxy 설치
OpenLDAP을 이용하여 Kubeview와 같은 서비스에 인증을 적용하는 방법은, OpenLDAP을 기반으로 LDAP 인증을 설정하고 이를 Kubernetes Ingress Controller 또는 oauth2-proxy
와 같은 프록시 서비스와 연동하여 LDAP 인증을 처리하는 방식으로 구현할 수 있습니다. 아래는 OpenLDAP을 활용한 인증 절차입니다.
방법 1: NGINX Ingress와 OpenLDAP 연동
- NGINX Ingress Controller 설치 및 설정
이미 설치된 NGINX Ingress Controller가 있는 경우, OpenLDAP을 연동하여 인증을 처리할 수 있습니다. OpenLDAP 인증을 위한nginx-auth-ldap
모듈을 사용하는 방법입니다. - LDAP 설정 적용
NGINX에서 LDAP 인증을 설정하려면nginx-auth-ldap
모듈을 사용하는 방식으로nginx.conf
에 LDAP 설정을 추가해야 합니다. NGINX Ingress Controller의 ConfigMap을 수정하거나 별도의 NGINX를 배포하여 처리할 수 있습니다.ldap_server openldap_auth { url ldap://<ldap-server-address>:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=person); binddn "cn=admin,dc=example,dc=com"; binddn_passwd <admin-password>; group_attribute memberUid; group_attribute_is_dn on; require valid_user; }
ldap.conf
파일에 OpenLDAP 서버 설정을 추가합니다.ldap-server-address
: OpenLDAP 서버의 주소binddn
: 인증을 위해 사용할 LDAP 바인딩 계정binddn_passwd
: 바인딩 계정의 비밀번호
- Ingress에서 LDAP 인증 적용
이 설정은 Kubeview로 접근할 때 OpenLDAP 인증을 요구합니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubeview-ingress annotations: nginx.ingress.kubernetes.io/auth-url: "ldap://<ldap-server-address>/ou=users,dc=example,dc=com?uid" nginx.ingress.kubernetes.io/auth-realm: "LDAP Authentication" spec: rules: - host: kubeview.example.com http: paths: - path: / pathType: Prefix backend: service: name: kubeview port: number: 80
- LDAP 인증을 NGINX Ingress에 적용하려면 다음과 같이 Ingress 리소스에 LDAP 설정을 추가합니다.
방법 2: oauth2-proxy와 LDAP 연동
oauth2-proxy
를 통해 LDAP 인증을 처리하는 방법도 있습니다. oauth2-proxy
는 OAuth 2.0 및 OIDC뿐만 아니라 LDAP 인증도 지원합니다.
- oauth2-proxy 설정 파일 구성
oauth2-proxy
설정 파일에 OpenLDAP 정보를 입력하여 설정을 구성합니다.
예를 들어,oauth2-proxy.cfg
파일을 작성할 때 다음과 같은 LDAP 설정을 추가합니다.provider = "ldap" ldap_url = "ldap://<ldap-server-address>:389" ldap_bind_dn = "cn=admin,dc=example,dc=com" ldap_bind_password = "<admin-password>" ldap_user_search_base_dn = "ou=users,dc=example,dc=com" ldap_user_search_filter = "(uid=%s)" email_domains = ["example.com"] cookie_secret = "<randomly-generated-secret>"
ldap_url
: LDAP 서버 주소ldap_bind_dn
: 바인딩 계정ldap_bind_password
: 바인딩 계정의 비밀번호ldap_user_search_base_dn
: 검색할 사용자 경로
- oauth2-proxy 배포
설정 파일이 완료되면, Helm을 이용해oauth2-proxy
를 배포할 수 있습니다.helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests helm install kubeview-oauth2-proxy oauth2-proxy/oauth2-proxy -f oauth2-proxy.cfg
- Ingress 설정
oauth2-proxy
를 통한 LDAP 인증이 가능해졌으므로, Ingress 설정에서 이를 적용할 수 있습니다.
이 방식은 사용자가 Kubeview에 접근할 때 OpenLDAP을 통해 인증을 수행하며, 인증이 성공하면 접근을 허용합니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubeview-ingress annotations: nginx.ingress.kubernetes.io/auth-url: "https://<oauth2-proxy-url>/oauth2/auth" nginx.ingress.kubernetes.io/auth-signin: "https://<oauth2-proxy-url>/oauth2/start?rd=$request_uri" spec: rules: - host: kubeview.example.com http: paths: - path: / pathType: Prefix backend: service: name: kubeview port: number: 80
방법 3: RBAC과 연동하여 사용자 관리
LDAP 인증을 통해 로그인한 사용자를 Kubernetes의 RBAC(Role-Based Access Control)와 연동하여 세부 권한 관리를 할 수 있습니다. 이를 통해 특정 LDAP 그룹에 속한 사용자만 Kubeview에 접근할 수 있도록 설정할 수 있습니다.
- Kubernetes RBAC 설정
ClusterRole
과ClusterRoleBinding
을 통해 LDAP 그룹과 Kubernetes 리소스를 연동합니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kubeview-user rules: - apiGroups: [""] resources: ["pods", "services", "namespaces"] verbs: ["get", "list"]
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubeview-access subjects: - kind: Group name: "<ldap-group-name>" # OpenLDAP에서 정의된 그룹 이름 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kubeview-user apiGroup: rbac.authorization.k8s.io
위 방법 중 하나를 선택하여 OpenLDAP 인증을 Kubernetes 클러스터 내의 Kubeview에 적용할 수 있습니다. 외부에 노출된 NGINX 앞단에 OpenLDAP 인증을 적용하려면, NGINX의 ngx_http_auth_ldap_module
을 사용하여 LDAP 인증을 구성할 수 있습니다.
1. nginx-auth-ldap 모듈 설치
ngx_http_auth_ldap_module
을 이용하여 NGINX에서 LDAP 인증을 처리할 수 있습니다. 이 모듈이 기본적으로 NGINX에 포함되지 않기 때문에, NGINX를 컴파일하여 LDAP 모듈을 추가하거나, 미리 컴파일된 패키지를 사용하는 방법이 있습니다. 만약 이미 NGINX를 사용 중이라면 LDAP 모듈이 포함된 버전을 설치하는 것이 가장 간단합니다.
다음은 LDAP 모듈을 포함한 NGINX 설치 방법입니다. 만약 모듈을 직접 컴파일하거나 추가하지 않는다면, LDAP 모듈이 포함된 패키지 저장소를 이용해 설치하는 것을 권장합니다.
sudo apt-get install libldap2-dev
sudo apt-get install nginx-module-ldap
2. LDAP 모듈을 활성화
nginx.conf
또는 NGINX 설정 파일에 LDAP 관련 설정을 추가해야 합니다. LDAP 서버와의 연결 및 인증 정보를 설정합니다.
http {
ldap_server openldap_auth {
url ldap://<ldap-server-ip>:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=person);
binddn "cn=admin,dc=example,dc=com";
binddn_passwd "<admin-password>";
group_attribute memberUid;
group_attribute_is_dn on;
require valid_user;
}
server {
listen 80;
server_name <your-server-domain>;
location / {
auth_ldap "LDAP Authentication";
auth_ldap_servers openldap_auth;
proxy_pass http://<backend-k8s-service>;
}
}
}
위 설정에서 중요한 부분은 다음과 같습니다.
ldap://<ldap-server-ip>
: OpenLDAP 서버의 IP 주소입니다.ou=users,dc=example,dc=com
: LDAP에서 인증할 사용자가 있는 경로입니다.binddn "cn=admin,dc=example,dc=com"
: LDAP 서버에 바인딩할 관리자 계정입니다.binddn_passwd "<admin-password>"
: 해당 관리자의 비밀번호입니다.require valid_user
: 인증에 성공한 사용자만 접근을 허용하는 옵션입니다.
3. NGINX 설정 테스트 및 적용
LDAP 설정을 추가한 후, NGINX 설정 파일이 올바른지 테스트합니다.
sudo nginx -t
문제가 없다면 NGINX를 다시 로드하여 새로운 설정을 적용합니다.
sudo systemctl reload nginx
4. NGINX와 Kubernetes 연동
이제 NGINX를 통해 LDAP 인증이 성공한 경우에만 Kubernetes 클러스터의 Kubeview와 같은 서비스로 접근할 수 있습니다. proxy_pass
지시문을 이용해 Kubernetes 클러스터 내 서비스로 트래픽을 전달하는 것을 확인하세요. 예를 들어, Kubeview 서비스가 kubeview-service
라는 이름으로 default
네임스페이스에 존재한다고 가정하면 proxy_pass
URL을 다음과 같이 설정할 수 있습니다.
proxy_pass http://kubeview-service.default.svc.cluster.local:8080;
5. LDAP 그룹 기반 인증 설정
LDAP 그룹을 기반으로 특정 그룹에 속한 사용자만 접근을 허용하려면, require group
지시문을 사용할 수 있습니다. 예를 들어, 특정 그룹에 속한 사용자만 접근하도록 제한하려면 다음과 같이 설정합니다.
ldap_server openldap_auth {
url ldap://<ldap-server-ip>:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=person);
binddn "cn=admin,dc=example,dc=com";
binddn_passwd "<admin-password>";
group_attribute memberUid;
group_attribute_is_dn on;
require group "cn=k8s-admins,ou=groups,dc=example,dc=com";
}
이 설정은 k8s-admins
그룹에 속한 사용자만 인증을 통과할 수 있도록 제한합니다.
6. SSL/TLS 설정
LDAP 연결 시 보안을 강화하려면 SSL/TLS를 적용하여 통신을 암호화할 수 있습니다. 이를 위해 ldap://
대신 ldaps://
를 사용하고, LDAP 서버에서 SSL 인증서를 설정해야 합니다.
ldap_server openldap_auth {
url ldaps://<ldap-server-ip>:636/ou=users,dc=example,dc=com?uid?sub?(objectClass=person);
binddn "cn=admin,dc=example,dc=com";
binddn_passwd "<admin-password>";
group_attribute memberUid;
group_attribute_is_dn on;
require valid_user;
}
이 설정을 적용하면, 외부에서 NGINX를 통해 Kubeview와 같은 Kubernetes 서비스에 접근할 때 OpenLDAP을 이용한 인증이 요구됩니다.
사설 IP에서 접근하는 경우 인증을 제외하고, 사설 IP가 아닌 경우에만 LDAP 인증을 적용하려면 NGINX 설정에서 조건에 따라 인증을 적용하는 방식으로 설정할 수 있습니다. 이를 위해 NGINX의 satisfy
지시문과 allow/deny
지시문을 사용할 수 있습니다. 다음은 NGINX 설정에서 사설 IP 대역을 허용하고, 외부 IP만 LDAP 인증을 요구하는 방법입니다.
1. NGINX 설정 파일 수정
아래와 같이 nginx.conf
또는 사이트별 NGINX 설정 파일을 수정합니다. 여기서는 사설 IP 주소 범위를 allow
하고, 그 외의 IP에 대해 LDAP 인증을 적용하는 설정입니다.
http {
ldap_server openldap_auth {
url ldap://<ldap-server-ip>:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=person);
binddn "cn=admin,dc=example,dc=com";
binddn_passwd "<admin-password>";
group_attribute memberUid;
group_attribute_is_dn on;
require valid_user;
}
server {
listen 80;
server_name <your-server-domain>;
location / {
# 사설 IP 대역 허용
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
# 모든 외부 IP는 인증을 요구
deny all;
# LDAP 인증 설정
satisfy any; # allow 조건이 충족되면 인증 없이 통과
auth_ldap "LDAP Authentication";
auth_ldap_servers openldap_auth;
# 프록시 설정
proxy_pass http://<backend-k8s-service>;
}
}
}
2. 설정 항목 설명
- allow: 사설 IP 대역을 지정하여 해당 범위에서 들어오는 요청은 인증 없이 접근을 허용합니다. 여기서 사용한 사설 IP 대역은 다음과 같습니다.
.10.0.0.0/8
: 10.x.x.x 대역172.16.0.0/12
: 172.16.x.x - 172.31.x.x 대역192.168.0.0/16
: 192.168.x.x 대역
- deny all: 위의
allow
에서 허용된 IP 대역 외에는 모두 접근을 차단합니다. - satisfy any:
allow
조건이나 인증 중 하나라도 만족하면 요청을 허용합니다. 즉, 사설 IP에서 온 요청은allow
로 통과되고, 외부 IP에서 온 요청은 LDAP 인증을 요구합니다. - auth_ldap: 사설 IP가 아닌 경우 LDAP 인증을 요구합니다.
3. NGINX 설정 적용
설정 파일을 수정한 후, NGINX 설정이 올바른지 테스트합니다.
sudo nginx -t
문제가 없다면 NGINX를 다시 로드하여 새로운 설정을 적용합니다.
sudo systemctl reload nginx
4. 외부 IP만 인증되는지 테스트
- 사설 IP 대역(예:
10.0.0.x
,192.168.x.x
)에서 접근할 경우 인증이 요구되지 않고 Kubeview에 접근이 가능한지 확인합니다. - 외부 IP에서 접근할 경우 LDAP 인증이 적용되는지 확인합니다.
이 설정을 통해 사설 IP에서의 접근은 인증 없이 허용하고, 외부에서의 접근은 LDAP 인증을 적용할 수 있습니다. 위 설정에서 allow
, deny
, 그리고 satisfy any
를 사용하여 사설 IP에서 접근할 때 인증 없이 허용하고, 외부 IP에서만 LDAP 인증을 요구하려는 경우, 몇 가지 점검할 부분과 개선이 필요할 수 있습니다.
1. satisfy any 동작 방식
NGINX
의 satisfy
지시어는 allow
및 deny
와 auth_ldap
지시어를 결합하여 접근 제어를 처리합니다. 이때 satisfy any
는 다음 조건 중 하나라도 만족하면 접근을 허용하는 방식입니다.
- IP가
allow
된 대역에 있으면 인증 없이 접근을 허용. - IP가
deny
된 대역에 있으면 LDAP 인증을 요구하고 인증 성공 시 접근을 허용.
그러나 여기서 중요한 점은 deny
가 걸리면 LDAP 인증을 요구하기 전에 차단될 수 있다는 점입니다. 또한, 사설 IP 대역에서 allow
를 통과하는 경우 LDAP 인증이 전혀 수행되지 않아야 합니다.
2. 설정 개선 방안
allow
와 deny
지시어가 기대한 대로 동작하지 않을 경우, 접근 제어 및 인증 처리를 구분하기 위해 NGINX 설정을 조금 더 명확하게 설정해야 합니다. 다음은 문제 해결을 위한 개선된 설정 예시입니다.
http {
ldap_server openldap_auth {
url ldap://<ldap-server-ip>:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=person);
binddn "cn=admin,dc=example,dc=com";
binddn_passwd "<admin-password>";
group_attribute memberUid;
group_attribute_is_dn on;
require valid_user;
}
server {
listen 80;
server_name <your-server-domain>;
location / {
# 사설 IP 대역은 인증 없이 허용
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
# 사설 IP 이외의 경우 접근 제한 및 LDAP 인증
deny all;
# 조건 충족 시 하나라도 만족하면 통과
satisfy any;
# LDAP 인증 설정
auth_ldap "LDAP Authentication";
auth_ldap_servers openldap_auth;
# 프록시로 백엔드 서비스 전달
proxy_pass http://<backend-k8s-service>;
}
}
}
3. 설정 설명
allow
지시어는 사설 IP 대역을 허용합니다. 이 대역에 포함된 IP는 LDAP 인증을 요구하지 않고 바로 접근을 허용합니다.deny all
지시어는 모든 외부 IP에 대해 기본적으로 접근을 차단합니다. 그러나satisfy any
설정 덕분에, 이 IP들이auth_ldap
인증을 통과하면 접근할 수 있습니다.satisfy any
지시어는allow
조건을 만족하거나, LDAP 인증이 성공하는 조건 중 하나만 충족하면 접근을 허용합니다.- 사설 IP 대역이면
allow
에 의해 통과. - 외부 IP 대역이면
auth_ldap
에 의해 인증을 요구.
- 사설 IP 대역이면
4. 설정 적용 및 테스트
- NGINX 설정 테스트: 설정이 올바르게 적용되었는지 확인하기 위해 테스트 명령을 실행하세요.
sudo nginx -t
- NGINX 재시작: 설정이 올바르게 적용되었다면 NGINX를 다시 로드하여 새로운 설정을 적용합니다.
sudo systemctl reload nginx
- 테스트: 사설 IP 대역(예:
10.x.x.x
,172.x.x.x
,192.168.x.x
)에서 접근 시 인증 없이 통과되는지 확인하고, 외부 IP에서 접근할 경우 LDAP 인증을 요구하는지 확인합니다.
5. SSL 문제도 함께 고려
만약 SSL을 사용하는 경우, SSL 설정도 점검해야 합니다. SSL 관련 설정이 잘못되었거나 인증서가 올바르게 구성되지 않은 경우 SSL 핸드셰이크가 실패할 수 있습니다.
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/cert.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
이 설정을 통해 외부 접근에만 LDAP 인증을 요구하도록 설정할 수 있으며, 사설 IP에서는 인증 없이 접근할 수 있습니다.
Kubernetes에 다양한 서비스에 대해 공통적으로 인증 기능을 적용하려면, Ingress에 인증 프록시를 설정하여 내부 아이피 대역은 인증 없이 접근을 허용하고, 외부 아이피는 인증을 요구하는 방식을 구현하는 것이 효과적입니다. 이 방식으로 하나의 인증 시스템을 통해 모든 서비스에 대한 접근을 관리할 수 있습니다. 이를 위해 oauth2-proxy
와 Ingress Controller를 연동하여 내부 사용자와 외부 사용자에 대한 인증을 효과적으로 처리할 수 있는 방법입니다.
- oauth2-proxy 설정 및 배포: OAuth 2.0, OIDC, LDAP 인증을 지원하는 프록시 서버인
oauth2-proxy
를 사용하여 Ingress와 연동. - Ingress Controller 설정: 모든 외부 요청은 인증 프록시를 거치고, 내부 아이피 대역에 대해서는 인증 없이 접근을 허용하도록 설정.
- 공통 인증 적용: Ingress에서 제공하는 인증 기능을 사용하여, 각 서비스에 동일한 인증 방식을 적용.
oauth2-proxy 배포 및 설정
oauth2-proxy
를 사용하면 Google, GitHub, LDAP 등 다양한 인증 제공자를 통해 인증을 수행할 수 있습니다. oauth2-proxy
Helm Chart를 사용하여 Kubernetes 클러스터에 배포합니다. 위에서 clientID
와 clientSecret
은 사용 중인 인증 제공자(Google, GitHub 등)와 연결된 정보입니다. LDAP을 사용하는 경우 LDAP 관련 설정을 추가해야 합니다.
oauth2-proxy.cfg
파일을 작성합니다.
helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests
helm install oauth2-proxy oauth2-proxy/oauth2-proxy \
--set config.clientID=<your-client-id> \
--set config.clientSecret=<your-client-secret> \
--set config.cookieSecret=$(openssl rand -base64 32)
oauth2-proxy
설정 파일 예시
provider = "google" # 사용할 인증 제공자
client_id = "<your-client-id>"
client_secret = "<your-client-secret>"
cookie_secret = "<your-cookie-secret>"
email_domains = ["example.com"]
upstreams = "static://200" # 인증 성공 시 허용 응답 설정
Ingress Controller 설정 및 내부/외부 IP 구분
Ingress Controller에 oauth2-proxy
를 연동하여 외부 IP에서 접근할 때만 인증을 요구하고, 내부 IP 대역에서는 인증을 요구하지 않도록 설정합니다. nginx.ingress.kubernetes.io/auth-url
과 nginx.ingress.kubernetes.io/auth-signin
을 사용하여 인증 URL을 지정합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/auth-url: "https://oauth2-proxy.example.com/oauth2/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://oauth2-proxy.example.com/oauth2/start?rd=$request_uri"
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" # 내부 IP 대역
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
nginx.ingress.kubernetes.io/auth-url
:oauth2-proxy
의 인증 URL을 지정하여, 외부 접근 시 인증이 필요하도록 설정.nginx.ingress.kubernetes.io/auth-signin
: 인증 페이지로 리다이렉트할 URL.nginx.ingress.kubernetes.io/whitelist-source-range
: 내부 IP 대역을 지정하여, 이 IP 대역에서 접근할 경우 인증 없이 바로 접근이 가능하도록 설정.
공통 인증 적용 방식 테스트
이제 Ingress Controller와 oauth2-proxy
가 연동되었으므로 다음을 확인합니다.
- 내부 IP 대역에서 테스트: 사설 IP(예:
10.0.0.0/8
,172.16.0.0/12
,192.168.0.0/16
)에서 접근할 경우, 인증 없이 서비스에 접근할 수 있는지 확인합니다. - 외부 IP 대역에서 테스트: 외부 IP에서 접근할 경우,
oauth2-proxy
가 인증을 요구하는지 확인합니다.
이 구성을 통해 모든 서비스에 대해 인증을 일관되게 적용할 수 있으며, 내부 네트워크에 대해서는 인증을 생략할 수 있습니다.
댓글