将Curl与Kubernetes nginx Ingress#5116一起使用
我通过nginx配置了对k8s中特定服务的身份验证 它与WUI配合得很好 我看到了一些例子 这也很好:将Curl与Kubernetes nginx Ingress#5116一起使用,curl,kubernetes,nginx-ingress,Curl,Kubernetes,Nginx Ingress,我通过nginx配置了对k8s中特定服务的身份验证 它与WUI配合得很好 我看到了一些例子 这也很好: curl-vhttp://10.2.29.4/ -H'Host:foo.bar.com'-u'foo:bar' 但我需要关闭我的url的其他部分 例如/api/v1/upload 我部署了第二个入口,路径为: spec: rules: - host: foo.bar.com http: paths: - backend: servic
curl-vhttp://10.2.29.4/ -H'Host:foo.bar.com'-u'foo:bar'
但我需要关闭我的url的其他部分
例如/api/v1/upload
我部署了第二个入口,路径为:
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: service
servicePort: 8000
path: /api/v1/upload
如果没有nginx,我可以输入:
curl-XPOST'file=@/file'http://10.2.29.4:8000/api/v1/upload -H“授权:密钥”
我需要如何尝试使用curl来隐藏真实的ip或端口并获得好的结果
如果你能帮我解决这个问题,我将不胜感激
入口1:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mobsf
namespace: default
labels:
app: mobsf
# env: dev
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: mobsf-basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
rules:
- host: worker1.mydomain.local
http:
paths:
- path: /
- backend:
serviceName: mobsf
servicePort: 8000
入口2:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mobsf2
namespace: default
labels:
app: mobsf2
# env: dev
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: mobsf-basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
rules:
- host: worker1.mydomain.local
http:
paths:
- backend:
serviceName: mobsf2
servicePort: 8000
path: /api/v1/
DNS检查(正确):
服务:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 159d
minio-service LoadBalancer 10.233.32.19 <pending> 9001:30809/TCP 104d
mobsf NodePort 10.233.18.34 <none> 8000:30426/TCP 8d
vault NodePort 10.233.43.134 <none> 8200:30820/TCP 69
在裸机安装中,默认情况下无法使用
入口
和负载平衡器
服务。您无法获取您提供的输出中显示的外部IP
您提供的第一个curl
命令显示您正在将服务mobsf
用作NodePort
,这意味着您可以通过输入节点+端口的IP来访问应用程序,就像这样http://:8080
,但不需要身份验证,因为您不是通过入口访问服务器
以下是所有服务类型及其工作原理:
:在群集内部IP上公开服务。选择此值将使服务只能从集群内访问。这是默认的ClusterIP
ServiceType
- :在静态端口(节点端口)的每个节点的IP上公开服务。自动创建
服务路由的节点端口
服务。您可以通过请求集群
,从集群外部联系:
服务节点端口
- :使用云提供商的负载平衡器在外部公开服务<自动创建外部负载平衡器路由到的代码>节点端口和
服务群集IP
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml
然后创建一个ConfigMap来配置:
-根据您的网络编辑ip范围
安装和配置MetalLB后,您应该能够使用入口和负载平衡器服务
这里有一个如何设置服务(ClusterIP)和入口的示例:
apiVersion: v1
kind: Service
metadata:
name: mobsf
spec:
selector:
app: mobsf
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mobsf-ing
namespace: default
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
rules:
- host: worker1.mydomain.local
http:
paths:
- path: "/"
backend:
serviceName: mobsf
servicePort: 8000
- path: "/api/v1"
backend:
serviceName: mobsf
servicePort: 8080
使用命令kubectl get ing
检查您的入口,并在EXTERNAL-IP
列中查找
之后,请确保在本地DNS中为指向上述ip的worker1.mydomain.local
配置一个条目
请让我知道这是否有帮助您想对路径“/”和“/api/v1/upload”使用身份验证吗?请发布所有入口yaml,并详细说明两个入口的身份验证。我做到了,plz CHECK是的,我想对两个路径/和/api/v1/UPLOADE使用auth。在这种情况下,您不需要有两个入口,您可以使用两个路径配置一个入口。但它是有效的,真正的问题是什么?无法为您的请求使用
worker1.mydomain.local
?如果您尝试使用nslooup或dig解析worker1.mydomain.local
,它是否正确并指向您的入口ip?请共享命令kubectl get svc
和kubectl get ing
的结果。我知道,我可以在一个yml文件中创建两个路径。这只是一次尝试,我加了一句!谢谢你的反馈!小的改进,第一次卷曲没有信誉是不行的。我用worker1.domain.local获得的应用程序的auth也太正确了!也许这改变了什么?@cryptoparty,可以更详细地解释一下吗?你是否尝试了我发布的步骤,但没有成功?不,这只是澄清,可能你误解了我,我没有尝试添加配置映射。是的,相同的结果:-(
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250 <= EDIT IP RANGE
$ kubectl get pods -n metallb-system
NAME READY STATUS RESTARTS AGE
controller-65895b47d4-6wzfr 1/1 Running 0 9d
speaker-v52xj 1/1 Running 0 9d
apiVersion: v1
kind: Service
metadata:
name: mobsf
spec:
selector:
app: mobsf
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mobsf-ing
namespace: default
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
rules:
- host: worker1.mydomain.local
http:
paths:
- path: "/"
backend:
serviceName: mobsf
servicePort: 8000
- path: "/api/v1"
backend:
serviceName: mobsf
servicePort: 8080