我通过nginx将身份验证配置为k8s中的特定服务。
它可以很好的工作在WUI。
我看到了一些例子
这也很好:
curl -v http://10.2.29.4/ -H 'Host: foo.bar.com' -u 'foo:bar'
但我需要关闭其他部分我的url同样。
例如/api/v1/上载
我用路径部署了第二入口:
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 "Authorization:key"
我需要如何尝试使用curl来隐藏真实的ip或端口并获得好的结果?
如果你能帮我弄清楚的话,我会非常感激的。
ingress1:
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检查(正确):
nslookup worker1.mydomain.local
Server: 10.2.67.10
Address: 10.2.67.10#53
Name: worker1.mydomain.local
Address: 10.2.67.203服务:
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英灵:
kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
mobsf worker1.dev002.local 80 2d1h
mobsf2 worker1.dev002.local 80 23h发布于 2020-02-20 08:54:33
在裸金属中,默认情况下安装不可能使用Ingress和LoadBalancer服务。您无法获得EXTERNAL-IP,如您提供的输出中所显示的那样。
您提供的第一个curl命令显示,您将服务mobsf用作NodePort,这意味着您能够到达您的应用程序,输入您的节点+端口的IP,就像这样的http://<NODE_IP>:8080,但是没有身份验证,因为您不是通过入口访问服务器的。
以下是所有服务类型及其工作方式:
ClusterIP:在集群内部IP上公开服务。选择此值使服务只能从集群中访问。这是默认的ServiceType。NodePort:在静态端口( NodePort)上公开每个节点的IP上的服务。自动创建ClusterIP服务( NodePort服务路由到的)。您可以通过请求NodePort,从集群外部与<NodeIP>:<NodePort>服务联系。LoadBalancer:使用云提供商的负载均衡器对外公开服务。自动创建外部负载均衡器路由的NodePort和ClusterIP服务。如何在裸金属安装中使用LoadBalancer和in?
Nginx 文档展示了如何设置MetalLB以允许裸金属集群使用LoadBalancer服务。
MetalLB为不在受支持的云提供商上运行的Kubernetes集群提供了网络负载平衡器实现,从而有效地允许在任何集群中使用LoadBalancer服务。
基本上,设置很简单:
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml然后创建一个ConfigMap来配置:-根据yout网络编辑ip范围
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,这是一个预期的输出:
$ 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在安装和配置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条目。
请告诉我这是否有帮助
https://stackoverflow.com/questions/60294885
复制相似问题