[英]SSL on node.js API running in StatefulSet on GKE
我有一個具有以下結構的應用程序:
它在具有以下結構的GKE集群中運行:
至少這是我做的工作,我在DevOps或網絡方面不太好。 現在,客戶端提出了一個請求,即第三方應用程序也將使用node.js API,但它希望在https上執行此操作。
我的第一次嘗試是使用greenlock-express.js,但是,它需要面向公眾的IP,但服務器只能看到它的集群IP。 我不知道這是否可以/應該改變,如果沒有,我應該采取什么其他方法?
謝謝!
YAML的
apiVersion: v1
kind: Service
metadata:
name: plo-set-service
labels:
app: plo
spec:
clusterIP: None
selector:
app: plo
ports:
- name: web
port: 80
protocol: TCP
targetPort: ploweb-port
- name: api
port: 3300
protocol: TCP
targetPort: ploapi-port
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: plo-set
spec:
serviceName: plo-set-service
replicas: 1
selector:
matchLabels:
app: plo
template:
metadata:
labels:
app: plo
spec:
containers:
- name: plo-server
image:
readinessProbe:
httpGet:
path: /healthz
port: 3300
initialDelaySeconds: 15
periodSeconds: 15
ports:
- name: ploapi-port
containerPort: 3300
volumeMounts:
- mountPath: /data
name: plo-volume
- name: plo-client
image:
ports:
- name: ploweb-port
containerPort: 80
volumeMounts:
- mountPath: /data
name: plo-volume
volumeClaimTemplates:
- metadata:
name: plo-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 500Gi
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: plo-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: plo-ip
spec:
backend:
serviceName: plo-web
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: plo-web
spec:
type: NodePort
externalTrafficPolicy: Local
selector:
statefulset.kubernetes.io/pod-name: plo-set-0
ports:
- name: web
port: 80
protocol: TCP
targetPort: 80
默認情況下,無論后端協議和端口如何, Nginx Ingress Controller
在端口"HTTP/80"
和"HTTPS/443"
。
因此,在您的情況下,如果您只是使用開箱即用的Nginx Ingress Controller,則無需為后端使用HTTPS協議進行任何更改
例如,我在端口80
和443
上具有Ingress Controller服務,如下所示,在部署Nginx控制器時創建
$ kubectl get svc nginx-ingress-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller LoadBalancer 10.15.254.182 <external-ip-addr> 80:32594/TCP,443:31949/TCP 2d
此外,我還在端口80上監聽my-nginx部署
$ kubectl get svc my-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx ClusterIP 10.15.252.11 <none> 80/TCP 30m
我已經部署了類似於你的簡單入口資源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-nginx-ingress
spec:
backend:
serviceName: my-nginx
servicePort: 80
現在,您可以通過從群集外部或集群內的DNS / ClusterIP請求Nginx Controller LoadBalancer IP,通過HTTP或HTTPS調用您的服務。
來自其他pod的集群內的HTTP請求 :
# curl -I http://nginx-ingress-controller
HTTP/1.1 200 OK
Server: nginx/1.15.9
...
HTTPS請求:
# curl -Ik https://nginx-ingress-controller
HTTP/2 200
server: nginx/1.15.9
...
希望它可以幫到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.