我有int i=0;
...
for (i=0; i<...)
应用(Web api),该应用首先通过k8s
公开(我已经使用端口转发来运行它,并且它按预期运行)
像NodePort
比我创建的localhost:8080/api/v1/users
类型为service
的{{1}}更加暴露在外面,它可以正常工作。
例如LoadBalancer
http://myhost:8080/api/v1/users
现在我们需要使其成为apiVersion: v1
kind: Service
metadata:
name: fzr
labels:
app: fzr
tier: service
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: fzr
,并且在阅读了有关该主题的内容后,我们决定为其使用 ingress 。
这就是我所做的
secure
现在我要运行它
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ctr-ingress
selector:
app: fzr
spec:
ports:
- name: https
port: 443
targetPort: https
这无法正常工作,我无法使用端口https://myhost:443/api/v1/users
作为443
来运行应用程序,请提出建议?
答案 0 :(得分:2)
在我看来,您正在为类型服务使用yaml模板来部署您的入口,但部署不正确。 targetPort
应该是一个数字端口,无论如何,我不认为“ https”是正确的值(尽管我可能是错的)。
类似这样的东西:
apiVersion: v1
kind: Service
type: NodePort
metadata:
name: fzr-ingress
spec:
type: NodePort
selector:
app: fzr
ports:
- protocol: TCP
port: 443
targetPort: 8080
现在,您有一个节点端口服务正在侦听443,并将流量转发到正在侦听端口8080的fzr吊舱。
但是,您正在监听端口443的事实并不能单独保护您的应用程序。要加密流量,您需要一个TLS证书,该证书必须以secret
的形式提供给入口。
如果这看起来有些复杂(因为确实如此),那么您可以考虑从helm chart部署Nginx入口
无论如何,您的入口Yaml看起来像这样:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: gcs-ingress
namespace: default
spec:
rules:
- host: myhost
http:
paths:
- backend:
serviceName: fzr
servicePort: 443
path: /api/v1/users
tls:
- hosts:
- myhost
secretName: myhosts-tls
有关如何配置此here
的更多信息