我有一个 Java 应用程序在 tomcat 服务器(位于 pod 内)内运行,该应用程序配置为使用 https。我正在使用 nginx 入口。问题是,nginx 入口正在终止 SSL 并仅将纯 http 转发到 tomcat 服务器(实际上是到 pod)。由于 tomcat 服务器配置为仅使用 HTTPS,因此它不接受流量。
以下不起作用:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
Run Code Online (Sandbox Code Playgroud) 我在 GKE 中有一个集群,它正在运行,一切似乎都在运行。如果我转发端口,我可以看到容器正在工作。
我无法从 namecheap 设置我拥有的域。
这些是我遵循的步骤
ns-cloud-c1.googledomains.com.
ns-cloud-c2.googledomains.com.
ns-cloud-c3.googledomains.com.
ns-cloud-c3.googledomains.com.
Run Code Online (Sandbox Code Playgroud)
我使用这封信c是因为集群位于一个c区域中(我不确定这是否正确)
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
Run Code Online (Sandbox Code Playgroud)
和
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml
Run Code Online (Sandbox Code Playgroud)
issuer.ymlapiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: example@email.com
# Name of a secret used to store the ACME …Run Code Online (Sandbox Code Playgroud) kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking
我有一个带有 Web 应用程序的 AKS 集群。我想配置一个 nginx Ingress 控制器以将应用程序公开到互联网,然后启用 TLS。
我一直在关注官方文档
https://learn.microsoft.com/en-us/azure/aks/ingress-basic
和
https://learn.microsoft.com/en-us/azure/aks/ingress-static-ip
但我总是以悬而未决的 nginx-ingress 服务结束并出现此错误
reason: SyncLoadBalancerFailed
message: >-
Error syncing load balancer: failed to ensure load balancer: instance not
found
Run Code Online (Sandbox Code Playgroud)
我见过
并用谷歌搜索了错误,但到目前为止还没有运气
有谁知道它会是什么?
或者,有一些我可以开始的工作示例吗?
我使用 helm 安装了 nginx-ingress。之后我注意到默认值controller.kind是deployment而不是daemonset,正如我在官方文档中找到的那样。
那么如何才能更新controller.kindfromdeployment到 而daemonset无需从头开始重新安装呢?
helm install nginx-ingress nginx-stable/nginx-ingress --set controller.service.type=NodePort --set controller.service.httpPort.nodePort=30000 --set controller.service.httpsPort.nodePort=30443
Run Code Online (Sandbox Code Playgroud) 编辑:
我删除了 minikube,在 Windows 的 Docker 桌面中启用了 kubernetes 并ingress-nginx手动安装。
$helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace
Release "ingress-nginx" does not exist. Installing it now.
Error: rendered manifests contain a resource that already exists. Unable to continue with install: ServiceAccount "ingress-nginx" in namespace "ingress-nginx" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "ingress-nginx"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set …Run Code Online (Sandbox Code Playgroud) 在 Ubuntu 20.04.4 LTS 上运行 microk8s v1.23.3。我已经设置了一个最小的 pod+service:
kubectl create deployment whoami --image=containous/whoami --namespace=default
Run Code Online (Sandbox Code Playgroud)
这按预期工作,curl10.1.76.4:80给出了正确的答复whoami。我配置了一项服务,请参阅以下内容service-whoami.yaml:
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: default
spec:
selector:
app: whoami
ports:
- protocol: TCP
port: 80
targetPort: 80
Run Code Online (Sandbox Code Playgroud)
这也按预期工作,可以通过 上的 clusterIP 访问 pod curl 10.152.183.220:80。现在我想使用以下方式公开该服务ingress-whoami.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
defaultBackend:
service:
name: whoami
port:
number: 80
rules:
- http:
paths:
- path: /whoami
pathType: …Run Code Online (Sandbox Code Playgroud) 我使用 helm 安装了 cert-manager (v1.8.0)。
\n应用了我的 ClusterIssuerkubectl apply -f issuer.yaml
apiVersion: cert-manager.io/v1\nkind: ClusterIssuer\nmetadata:\n name: letsencrypt-nginx\nspec:\n # ACME issuer configuration\n # `email` - the email address to be associated with the ACME account (make sure it\'s a valid one)\n # `server` - the URL used to access the ACME server\xe2\x80\x99s directory endpoint\n # `privateKeySecretRef` - Kubernetes Secret to store the automatically generated ACME account private key\n acme:\n email: \'myemail\'\n server: https://acme-staging-v02.api.letsencrypt.org/directory\n …Run Code Online (Sandbox Code Playgroud) 在我的公司中,我们的 Kubernetes 集群最近更新到了 1.22+,并且我们正在使用 AKS。因此,我必须更改使用的 ingress yaml 文件的清单:networking.k8s.io/v1beta1,以符合新的 apiVersion:networking.k8s.io/v1
这是入口文件的早期清单:
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "amroingress.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "amroingress.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- …Run Code Online (Sandbox Code Playgroud) kubernetes kubernetes-helm kubernetes-ingress azure-aks nginx-ingress
我目前正在尝试在 nginx-ingress 后面的 K8S 中设置一个应用程序。证书应由 cert-manager 和 Let's Encrypt 生成(目前暂存)。
\n该应用程序位于命名空间 prod 中,nginx-ingress-controller 位于命名空间 nginx 中,而 cert-manager 位于 cert-manager 命名空间中。
\n我们为 Let's Encrypt 暂存设置了 ClusterIssuer 并成功生成了证书(我们可以在机密和证书资源中看到它)。然而,nginx-ingress-controller 仍然使用 Kubernetes Ingress Controller 假证书进行应答。
\n以下是一些技术细节:
\n入口
\n\xe2\x9d\xaf kubectl describe ingress/forgerock\nName: forgerock\nLabels: <none>\nNamespace: prod\nAddress: someaws-id.elb.eu-central-1.amazonaws.com\nIngress Class: <none>\nDefault backend: <default>\nTLS:\n sslcertciam terminates ciam.test.fancycorp.com\nRules:\n Host Path Backends\n ---- ---- --------\n ciam.test.fancycorp.com\n /am/json/authenticate am:80 (10.0.2.210:8081)\n ...\n /am/extlogin am:80 (10.0.2.210:8081)\nAnnotations: cert-manager.io/cluster-issuer: letsencrypt-stage\n haproxy.router.openshift.io/cookie_name: route\n kubernetes.io/ingress.class: nginx\n nginx.ingress.kubernetes.io/affinity: cookie\n nginx.ingress.kubernetes.io/body-size: 64m\n nginx.ingress.kubernetes.io/enable-cors: false\n nginx.ingress.kubernetes.io/proxy-body-size: …Run Code Online (Sandbox Code Playgroud) 我有ingress.yaml两条路径;每个到我的一个微前端。然而,我真的很难让重写目标发挥作用。mf1 正确加载,但 mf2 不正确。我做了一些研究,知道我需要使用Captured Groups,但似乎无法正确实现这一点。我怎么做?
这就是我的入口的样子:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http-ingress
annotations:
kubernetes.io/ingress.class: public
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mf1
port:
number: 80
- path: /mf2
pathType: Prefix
backend:
service:
name: mf2
port:
number: 80
Run Code Online (Sandbox Code Playgroud) nginx-ingress ×10
kubernetes ×9
nginx ×3
azure ×2
azure-aks ×2
cert-manager ×2
daemonset ×1
lets-encrypt ×1
microk8s ×1
tomcat ×1