Невозможно получить доступ к чат-боту в AKS с помощью входа - PullRequest
0 голосов
/ 08 января 2020

Я пытался запустить и запустить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...