Я пытался запустить и запустить MS Chatbot в Azure и не могу получить к нему доступ с помощью эмулятора и точки входа. Я могу получить к нему доступ напрямую, используя его publi c IP. (Я удалю publi c ip, как только это сработает.) Кажется, я не вижу ничего в журналах контроллера, когда пытаюсь получить к нему доступ с помощью эмулятора.
Я использовал https://docs.microsoft.com/en-us/azure/aks/ingress-tls и https://medium.com/@AliMazaheri / building-a-chat-bot-using- azure -aks-and-bot-framework-bfa1f698cc3 c в качестве вдохновения.
Вот версии инструментов, которые я использую:
azure-cli 2.0.78
command-modules-nspkg 2.0.3
core 2.0.78
nspkg 3.0.4
telemetry 1.0.4
docker 2.1.0.5
helm
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
Мой файл docker предоставляет порты 80, 443 и 3978.
Я создал образ с помощью docker - составьте и в файле переопределения у меня есть «7009: 80» и «7010: 3978». Вот мой файл развертывания:
apiVersion: apps/v1
kind: Deployment
metadata:
name: chat
labels:
app: chat
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: chat
version: v1
template:
metadata:
labels:
app: chat
version: v1
spec:
containers:
- name: chat
image: chatm3up.azurecr.io/talki/chat:v2-linux-latest
env:
...
ports:
- containerPort: 3978
protocol: TCP
- containerPort: 80
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: chat
spec:
selector:
app: chat
version: v1
ports:
- name: chat
protocol: TCP
port: 3978
targetPort: 3978
- name: http
protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Служба имеет общедоступный c IP, и когда я использую эмулятор, он работает нормально.
Затем я установил nginx -вход с помощью helm:
helm install stable/nginx-ingress \
--namespace default \
--set controller.replicaCount=1 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux
Теперь у меня есть контроллер и служба бэкэнда. Контроллер имеет общедоступный c ip.
Я дал контроллеру fqdn. Давайте назовем это chatty-ingress.canadacentral.cloudapp. azure .com. Вызов этого напрямую вызывает страницу бота по умолчанию.
Я создал менеджер сертификатов, используя инструкции в документе MS.
# Install the CustomResourceDefinition resources separately
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.8/deploy/manifests/00-crds.yaml
# Create the namespace for cert-manager
kubectl create namespace cert-manager
# Label the cert-manager namespace to disable resource validation
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
# Update your local Helm chart repository cache
helm repo update
# Install the cert-manager Helm chart
helm install \
--name cert-manager \
--namespace cert-manager \
--version v0.8.0 \
jetstack/cert-manager
Затем я создал CertificateIssuer, используя следующее развертывание:
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
namespace: default
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: me@here.com
privateKeySecretRef:
name: letsencrypt-staging
http01: {}
Затем я создал входной файл.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: chatty-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-staging
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- chatty-ingress.canadacentral.cloudapp.azure.com
secretName: tls-secret
rules:
- host: chatty-ingress.canadacentral.cloudapp.azure.com
http:
paths:
- backend:
serviceName: chat
servicePort: 80 #I’ve used 3978 as well. With 80 the web pages comes up.
path: /.*
Результаты kubectl get sv c -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cert-manager cert-manager-webhook ClusterIP y.y.y.y <none> 443/TCP 4d22h
default apigateway-service LoadBalancer y.y.y.y x.x.x.x 80:31475/TCP 28d
default randomclient-service LoadBalancer y.y.y.y x.x.x.x 80:30397/TCP 28d
default identity-service LoadBalancer y.y.y.y x.x.x.x 80:30446/TCP 28d
default kubernetes ClusterIP y.y.y.y <none> 443/TCP 29d
default my-nginx-nginx-ingress-controller LoadBalancer y.y.y.y x.x.x.x 80:31570/TCP,443:32741/TCP 4d18h
default my-nginx-nginx-ingress-default-backend ClusterIP y.y.y.y <none> 80/TCP 4d18h
default chat LoadBalancer y.y.y.y x.x.x.x 3978:31738/TCP,80:31591/TCP 40m
default rabbitmq ClusterIP y.y.y.y <none> 5672/TCP 28d
default reports-service ClusterIP y.y.y.y <none> 80/TCP 28d
kube-system healthmodel-replicaset-service ClusterIP y.y.y.y <none> 25227/TCP 29d
kube-system kube-dns ClusterIP y.y.y.y <none> 53/UDP,53/TCP 29d
kube-system kubernetes-dashboard ClusterIP y.y.y.y <none> 80/TCP 29d
kube-system metrics-server ClusterIP y.y.y.y <none> 443/TCP 29d