Я воспроизвел твой сценарий, и это сработало для меня. Я постараюсь показать вам шаги, которым я следовал.
Облачный провайдер : GKE Kubernetes Версия : v1.15.3 Пространство имен : default
Я использую 2 развертывания по 2 образа с сервисом для каждого.
Сервис 1 : default-http-backend
- с nginx образом, оно будет нашим бэкэндом по умолчанию.
Сервис 2 : custom-http-backend
- с неодушевленным образом / изображением эхо-сервера эта служба будет отображаться, если запрос получен из белого списка ip.
Вход : Nginx вход с аннотациями.
Ожидаемое поведение: Вход будет настроен для использования default-backend , custom-http-errors и whitelist-source-range аннотации. Если запрос был сделан из белого списка IP-адресов, вход будет перенаправлен на custom-http-backend , если нет, он будет перенаправлен на default-http-backend .
Развертывание 1: default-http-backend
Создание файла default-http-backend.yaml
с таким содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: default-http-backend
spec:
selector:
matchLabels:
app: default-http-backend
template:
metadata:
labels:
app: default-http-backend
spec:
containers:
- name: default-http-backend
image: nginx
ports:
- name: http
containerPort: 80
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
spec:
selector:
app: default-http-backend
ports:
- protocol: TCP
port: 80
targetPort: 80
Применение файла yaml: k apply -f default-http-backend.yaml
Развертывание 2 : custom-http-backend
Создайте файл custom-http-backend.yaml
с этим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-http-backend
spec:
selector:
matchLabels:
app: custom-http-backend
template:
metadata:
labels:
app: custom-http-backend
spec:
containers:
- name: custom-http-backend
image: inanimate/echo-server
ports:
- name: http
containerPort: 8080
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: custom-http-backend
spec:
selector:
app: custom-http-backend
ports:
- protocol: TCP
port: 80
targetPort: 8080
Примените файл yaml: k apply -f custom-http-backend.yaml
Проверьте, работают ли службы и работает
Я использую псевдоним k
для kubectl
➜ ~ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
custom-http-backend ClusterIP 10.125.5.227 <none> 80/TCP 73s
default-http-backend ClusterIP 10.125.9.218 <none> 80/TCP 5m41s
...
➜ ~ k get pods
NAME READY STATUS RESTARTS AGE
custom-http-backend-67844fb65d-k2mwl 1/1 Running 0 2m10s
default-http-backend-5485f569bd-fkd6f 1/1 Running 0 6m39s
...
Вы можете протестировать службу, используя port- вперед :
default-http-backend k port-forward svc/default-http-backend 8080:80
Попробуйте получить доступ к http://localhost: 8080 в своем обзоре, чтобы увидеть страницу nginx по умолчанию .
custom-http-backend k port-forward svc/custom-http-backend 8080:80
Попробуйте получить доступ к http://localhost: 8080 в своем обзоре, чтобы увидеть пользовательскую страницу, предоставленную изображением эхо-сервера .
Входная конфигурация
* 10 91 * На данный момент у нас есть и запущены обе службы, нам нужно установить и настроить вход nginx. Вы можете следовать официальной документации
, здесь это не рассматривается.
После установки давайте развернем вход, основываясь на коде, который вы опубликовали, я сделал некоторые изменения: удалил tls, добавил другой домен и удалил путь /api
только для целей тестирования и добавил мой домашний ip в белый список.
Создайте файл my-app-ingress.yaml
с содержанием:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/custom-http-errors: '403'
nginx.ingress.kubernetes.io/default-backend: default-http-backend
nginx.ingress.kubernetes.io/whitelist-source-range: 207.34.xxx.xx/32
spec:
rules:
- host: myapp.rabello.me
http:
paths:
- path: "/"
backend:
serviceName: custom-http-backend
servicePort: 80
Примените spe c: k apply -f my-app-ingress.yaml
Проверьте вход с помощью команды:
➜ ~ k get ing
NAME HOSTS ADDRESS PORTS AGE
my-app-ingress myapp.rabello.me 146.148.xx.xxx 80 36m
Вот и все!
Если я проверю из дома мой ip из белого списка, отображается пользовательская страница, но если я пытаюсь получить доступ с помощью своего мобильного телефона в сети 4G, отображается страница nginx по умолчанию.
Примечание. Я использую вход и службы в одном и том же пространстве имен, если вам нужно Для работы с другим пространством имен вам необходимо использовать ExternalName .
Надеюсь, это поможет!
Ссылки: kubernetes deployings
сервис kubernetes
nginx вход
nginx аннотации