Мне нужна помощь в достижении этих двух вещей:
- Настройка моего nginx входного контроллера на AKS без использования helm (я не хочу )
- Заставить мой вход использовать уже зарезервированный IP-адрес с именем ресурса 'kubernetes-ip'
На первом шаге я следую без везения эта документация: https://kubernetes.github.io/ingress-nginx/deploy/#azure
И я не забыл обязательно. yaml!
мое пошаговое руководство :
У меня есть кластер basi c kubernetes с двумя модулями, как показано ниже:
NAME READY STATUS RESTARTS AGE
activemq-demo-7b769bcc4-jtsj5 1/1 Running 0 55m
ubuntu-dcb9c6ccb-wkz2w 1/1 Running 0 2d
На этом этапе я хочу добавить свой вход, чтобы я мог добраться до демо activemq используя мой publi c ip адрес ab c .d
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/cloud-generic.yaml
После этого я запускаю kubectl get services -n ingress- nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx LoadBalancer 10.0.186.143 zz.zz.zzz.zzz 80:32703/TCP,443:30584/TCP 17s
Что хорошо! кажется, работает правильно? на этом этапе я должен иметь возможность подключиться к внешнему IP-адресу к любому из этих портов, но я не могу: (
$ telnet zz.zz.zzz.zzz 80
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
$ telnet zz.zz.zzz.zzz 443
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
Я знаю, что обязательный. yaml не делает ' Я ничего не знаю о своем зарезервированном IP-адресе, но я игнорирую его, потому что у меня есть большая проблема, я не могу подключиться.
Я также на минуту игнорирую, что не могу подключиться только для проверки, если Мне нужен фактический ingress.yaml . Поэтому я использую kubectl apply -f ingress. html. (Ingress.yaml содержит следующий код)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress1
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "*"
spec:
tls:
- hosts:
- amq-test.mydomain.com
secretName: my-certificate
rules:
- host: amq-test.mydomain.com
http:
paths:
- path: /*
backend:
serviceName: activemq-demo-service
servicePort: 8161
После этого, если я запускаю kubectl, получая , я получаю:
NAME HOSTS ADDRESS PORTS AGE
ingress1 amq-test.mydomain.com zz.zz.zzz.zzz 80, 443 66s
Но то же самое, я не могу подключиться:
FROM WSL
$ telnet zz.zz.zzz.zzz 80
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
$ telnet zz.zz.zzz.zzz 443
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
Честно говоря, я не уверен, что мне не хватает, это должно быть очень просто с официальной документацией, я не знаю, должен ли я включить что-то еще в Azure ...
Спасибо за чтение, любая помощь будет оценена.
РЕДАКТИРОВАТЬ 3/7/2020: activemq-demo Deployment & Service @J ean-Philippe Bond
apiVersion: apps/v1
kind: Deployment
metadata:
name: activemq-demo
labels:
app: activemq-demo
tier: backend
spec:
revisionHistoryLimit: 1
replicas: 1
selector:
matchLabels:
app: activemq-demo
template:
metadata:
labels:
app: activemq-demo
tier: backend
spec:
containers:
- name: activemq-demo
image: myproject.azurecr.io/activemq-slim:5.15.9-3
imagePullPolicy: "Always"
command: ["/start.sh"]
args: ["somename"]
env:
- name: LANG
value: "C.UTF-8"
ports:
- containerPort: 8161
- containerPort: 61616
livenessProbe:
exec:
command:
- /isAlive.sh
- somename
initialDelaySeconds: 15
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: activemq-demo-service
labels:
tier: controller
spec:
type: NodePort
ports:
- name: http
protocol: TCP
port: 8161
targetPort: 8161
- name: acceptor
protocol: TCP
port: 61616
targetPort: 61616
selector:
app: activemq-demo
tier: backend
Обратите внимание, что единственная вещь, к которой я хочу получить доступ извне, - это веб-служба HTTP, которую ActiveMQ предоставляет на порт 8161 по умолчанию
РЕДАКТИРОВАТЬ 3/9/2020: запрос @HelloWorld
te lnet из WSL
$ telnet zz.zz.zzz.zzz 80
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
$ telnet zz.zz.zzz.zzz 443
Trying zz.zz.zzz.zzz...
(a long time later...)
telnet: Unable to connect to remote host: Resource temporarily unavailable
te lnet из macos
$ telnet zz.zz.zzz.zzz 80
Trying zz.zz.zzz.zzz...
telnet: connect to address zz.zz.zzz.zzz: Operation timed out
telnet: Unable to connect to remote host
$ telnet zz.zz.zzz.zzz 443
Trying zz.zz.zzz.zzz...
telnet: connect to address zz.zz.zzz.zzz: Operation timed out
telnet: Unable to connect to remote host
скручивание от макроса - HTTP
$ curl -v -X GET http://amq-test.mydomain.com
Note: Unnecessary use of -X or --request, GET is already inferred.
* Trying zz.zz.zzz.zzz:80...
* TCP_NODELAY set
* Connection failed
* connect to zz.zz.zzz.zzz port 80 failed: Operation timed out
* Failed to connect to amq-test.mydomain.com port 80: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to amq-test.mydomain.com port 80: Operation timed out
скручивание от макроса - HTTPS
$ curl -v -X GET https://amq-test.mydomain.com
Note: Unnecessary use of -X or --request, GET is already inferred.
* Trying zz.zz.zzz.zzz:443...
* TCP_NODELAY set
* Connection failed
* connect to zz.zz.zzz.zzz port 443 failed: Operation timed out
* Failed to connect to amq-test.mydomain.com port 443: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to amq-test.mydomain.com port 443: Operation timed out
РЕДАКТИРОВАНИЕ 3/10/2020: Начиная с нуля (несколько раз)
Я удалил все, чтобы начать "fre sh" без особой удачи, но я заметил некоторые вещи, которые, мы надеемся, могут вызвать некоторые мысли ...
Основы:
- У меня уже есть группа ресурсов, которую я использую: MyResourceGroup
- У меня уже есть виртуальная сеть с Су bnet MyVirtua lNet
- Я уже зарезервировал IP-адрес Publi c, который хочу использовать с мой вход, это св ati c IP, который я хочу запретить изменять (или удалять) до конца времени: AB C .D
- У меня уже есть свой собственный домен, который у меня есть Направлено на AB C .D: amq-test.mydomain.com
Моя процедура:
- Я создаю новый Kubernetes Служба, использующая веб-интерфейс Azure, я выбираю свою группу ресурсов, а также виртуальную сеть и Su bnet
- . Как только я создал базовую службу Kubernetes, я заметил, что она создает LoadBalancer с другим IP-адресом Publi c, которым я не могу управлять, я предполагаю, что это потому, что этот IP-адрес будет использоваться в качестве основной точки входа для таких вещей, как kubectl и удаленного управления.
- С живым кластером я создаю основной c ActiveMQ-образ, которым я поделился ранее
- Теперь я начинаю с ingress- nginx и развертываю обязательный.yaml
- А затем я добавляю Azure Сервис yaml сюда , но на этот раз с двумя модификациями, чтобы он использовал мой IP-адрес Publi c. эта модификация была извлечена из документации Microsoft
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
annotations:
service.beta.kubernetes.io/azure-load-balancer-resource-group: MyResourceGroup
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
loadBalancerIP: A.B.C.D
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
При этом работает без ошибок, все как и ожидалось:
$ kubectl get svc -n ingress-nginx -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
ingress-nginx LoadBalancer 10.0.30.100 A.B.C.D 80:30682/TCP,443:31002/TCP 35m app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx
Я развернул последнюю часть, верно? мой ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress1
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "*"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: activemq-demo-service
servicePort: 8161
Это работает без проблем, и когда он работает, я проверил:
$ kubectl describe ingress
Name: ingress1
Namespace: default
Address: A.B.C.D
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
*
/* queue-callbacks-service:8161 (10.94.20.14:8161)
Annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/cors-allow-credentials: true
nginx.ingress.kubernetes.io/cors-allow-methods: *
nginx.ingress.kubernetes.io/cors-allow-origin: *
nginx.ingress.kubernetes.io/enable-cors: true
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/cors-allow-credentials":"true","nginx.ingress.kubernetes.io/cors-allow-methods":"*","nginx.ingress.kubernetes.io/cors-allow-origin":"*","nginx.ingress.kubernetes.io/enable-cors":"true"},"name":"ingress1","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"queue-callbacks-service","servicePort":8161},"path":"/callbacks/*"}]}}]}}
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 35m nginx-ingress-controller Ingress default/ingress1
Normal UPDATE 34m nginx-ingress-controller Ingress default/ingress1
Все кажется идеальным, но я просто не могу подключиться к IP-адресу или хосту, использующему любой (80, 443) порт
Надеюсь, это поможет
Просто к вашему сведению Я только что попробовал с Хелмом, следуя этой документации и я получил тот же результат
РЕДАКТИРОВАНИЕ 15/15/2020: еще не сделано
Я работал над другим проектом, так что этот был приостановлен на мгновение, я Я возвращаюсь к этому сейчас, к сожалению, все еще не работает, я открыл билет в Microsoft и жду его.
Однако мы заметили, что порт 80 фильтруется каким-то брандмауэром или чем-то, мы не уверен, что является причиной этого, поскольку у нас есть входящие правила на нашем SG с портами 80 и 443, открытыми с * по любому протоколу
$ nmap -Pn zz.zz.zz.zzz -p 80,443
Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-15 11:01 Pacific SA Standard Time
Nmap scan report for zz.zz.zz.zzz
Host is up.
PORT STATE SERVICE
80/tcp filtered http
443/tcp filtered https
Nmap done: 1 IP address (1 host up) scanned in 4.62 seconds