gpt4 book ai didi

azure - Kubernetes - 我如何确认我的入口 Controller 正在执行它应该执行的所有操作?

转载 作者:行者123 更新时间:2023-12-03 02:00:20 29 4
gpt4 key购买 nike

我一直在努力尝试我的第一个 kubernetes 设置,但我不知道哪里出了问题。我有一个可以在本地运行的 .Net API,并且我可以确认 Docker 镜像在本地运行没有问题。但是,当部署到 Kubernetes 服务中时,我只从 Nginx 收到 404,并且我设置的证书无效。

我托管在 azure 中,正在构建并发布到 ACR,部署由 CICD 管道运行并拉取正确的镜像。

这些是我迄今为止拥有的文件:Deployment.yaml(占位符由 CICD 引入):

apiVersion: apps/v1
kind: Deployment
metadata:
name: mywebsite-api-deployment
spec:
selector:
matchLabels:
app: mywebsite-api-pod
template:
metadata:
labels:
app: mywebsite-api-pod
spec:
containers:
- name: mywebsite-api-container
image: ${acrLoginServer}/${repository}:${imageTag}
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
imagePullPolicy: Always

service.yaml:

apiVersion: v1
kind: Service
metadata:
name: mywebsite-api-service
spec:
selector:
app: mywebsite-api-pod
ports:
- port: 80
targetPort: 80
type: ClusterIP

入口.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mywebsite-ingress
spec:
tls:
- hosts:
- api-uat.mywebsite.com
secretName: mywebsite-tls
defaultBackend:
service:
name: mywebsite-api-service
port:
number: 80
rules:
- host: api-uat.mywebsite.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mywebsite-api-service
port:
number: 80

secret :

apiVersion: v1
data:
tls.crt: /notpasted/
tls.key: /notpasted/
kind: Secret
metadata:
creationTimestamp: "2023-06-06T17:47:27Z"
name: mywebsite-tls
namespace: default
resourceVersion: "2795660"
uid:
type: kubernetes.io/tls

我拥有的证书是通配符,并且我已将 DNS 条目指向正确的 IP 地址,因此我假设该位至少配置正确。

知道我哪里出错了,k8s 提供的证书是标准的 Acme 证书,我发出的每个请求都会返回 404。我没有使用 Helm,因为它看起来有点过分了,但也许不是吗?

感谢您的建议。

最佳答案

我自己找到了答案。我不明白 nginx 是如何设置的,也不明白它本身作为 pod 运行在不同的命名空间中。

从该 nginx pod 中,我可以查看日志并识别出以下条目:

I0606 17:34:42.990421       8 store.go:425] "Ignoring ingress because of error while validating ingress class" ingress="default/mywebsite-ingress" error="ingress does not contain a valid IngressClass"

然后我可以运行以下命令来获取 ingressClass 名称:kubectl get ingressclass -A -o yaml

apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
creationTimestamp: "2023-06-04T11:38:58Z"
generation: 1
name: webapprouting.kubernetes.azure.com
resourceVersion: "2997218"
uid: 8547e63e-30f7-4dfe-910b-2f7dce8884a3
spec:
controller: k8s.io/ingress-nginx
kind: List
metadata:
resourceVersion: ""
selfLink: ""

我只需将类名添加到我的 ingress.yaml 中即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mywebsite-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: webapprouting.kubernetes.azure.com
tls:
- hosts
etc. etc.

关于azure - Kubernetes - 我如何确认我的入口 Controller 正在执行它应该执行的所有操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76417462/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com