Kubernetes Windows AWS(EKS)集群,无法连接到正在运行的服务

时间:2020-06-23 11:43:41

标签: amazon-eks eks

我试图使用AWS EKS在Docker和K8s中运行一个相当标准的.NET WebApi应用程序(可悲的是.NET 4.7.2,而不是.NET核心)

我可以看到该服务和POD已显示为正在运行,并且可以交互地进入POD并查看其日志,并看到它似乎开始正常,但是我很难触及正在运行的WebApi端点

这是我正在进行的事情的完整列表

  • 简单的.NET 4.7.2 WebApi,它需要AWT的JWT令牌
  • 用于记录的NLog
  • 简单的1 POD 1服务(现在)
  • 使用AWS EKS
  • 在EKS群集中使用Windows主机
  • 为Docker使用Windows基本映像

就像我说的那样,该服务看起来正常启动,但是我似乎无法连接到它

我也习惯于看到一大堆额外的环境变量,如此处所述:https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables

此外,由于CoreDNS(似乎正在运行),使用 [servicename]。[namespace] 格式的服务的DNS记录也应可用:{{3} }

无论如何这里是相关文件

Docker文件

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-1803
ADD . /app
WORKDIR /app
RUN DIR
RUN echo 10.46.140.93 gb01wanaapp01q.global.icap.com >> "C:\Windows\System32\drivers\etc\hosts" 
RUN ping gb01wanaapp01q.global.icap.com
ENTRYPOINT "WebApiService.exe"

K8s POD /服务

---

apiVersion: apps/v1
kind: Deployment

{{ $envparams := .Values.global.env | lower }}

metadata:
  name: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}-deployment"
  labels:
    app.kubernetes.io/name: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}"
    app.kubernetes.io/part-of: "{{ .Values.global.name }}"
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: "{{ .Values.global.name }}"
  template:
    metadata:
      labels:
        app.kubernetes.io/name: "{{ .Values.global.name }}"
        app.kubernetes.io/part-of: "{{ .Values.global.name }}"
        appname: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}-{{ .Values.global.appname }}" 
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    spec:
      nodeSelector:
        kubernetes.io/os: windows
      containers:
        - name: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}"
          image: "{{ .Values.containers.axiom.image.repository }}:{{ .Values.containers.axiom.image.tag }}"
          imagePullPolicy: Always
          command: ["C:\\app\\WebApiService.exe"]
          ports:
          - containerPort: 9873

---
apiVersion: v1
kind: Service
metadata:
  name: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}-{{ .Values.global.appname }}-service"
spec:
  selector:
    appname: "{{ .Values.global.name }}-{{ .Values.global.env | lower }}-{{ .Values.global.appname }}" 
  ports:
  - protocol: TCP
    port: 9873
    targetPort: 9873
  type: NodePort       

我们正在使用HELM将变量注入这些文件中

我们可以看到,当我们描述服务时,它会在30000-32767范围内分配一个随机端口,如下所示:https://kubernetes.io/docs/concepts/services-networking/service/#dns

这似乎可行,因此我们设置了一个AWS安全组,以确保自动创建的端口处于打开状态

然后我们尝试获取EC2节点IP地址,并将其与自动分配的端口结合使用

但这似乎不起作用

但是,检查POD日志后,代码/ docker容器看起来不错,它们已经启动,并且运行良好。这似乎是纯粹的网络问题

所以我有几个问题

  • 为什么k8不创建我的特定env变量,如下所示(在Linux中,我没有任何后顾之忧):https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
  • 为什么k8s不创建DNS条目,我可以在这里检查什么(就像我说的Cor​​eDNS正在运行)
  • 对于使用type: NodePort的服务,我的意思是[cluster_Ip]:[cluster_port]应该可以工作,其中cluster_ip应该是集群中EC2 Windows节点的IP,cluster_port应该是如上面的Service YAML中所示是端口

有人知道为什么这些东西在Windows主机的AWS EKS中不起作用吗?

0 个答案:

没有答案